web-dev-qa-db-ja.com

Wix-インストールしたディレクトリからインストール後にexeファイルを実行するにはどうすればよいですか?

私はwixを使用してインストールされているプログラムを使用しています。 (関連性があるかどうかはわかりませんが、C#プログラムです)

Msiファイルでインストールされたexeファイルを実行したいのですが、ユーザーがインストールパスを選択しているため、インストール場所がわかりません。

たとえば、ユーザーが選択した場所からexeファイルを実行する方法を尋ねたいと思いました。

それは質問の一部ではありませんが、私はwixの初心者であり、すべてを初めて行うので、絶対的な場所からexeファイルを実行する例をいくつか見ることもできてうれしいです。

16
Yonatan Nir

UIが必要ない場合、Isaiah4110の回答は最善の方法ではありません。

Wixによって生成されたmsiを介してインストールしているexeファイルターゲットを実行する最も簡単な方法は、カスタムアクションタイプ18(FileKeyによってアクションを識別する)を使用することです。ここに完全な例があります。

<Fragment>
<ComponentGroup Id="ProductComponents" Directory="INSTALLFOLDER">
  <Component Id="TargetProgram" Guid="f757ff43-0266-483a-8749-ec796cba4b25" >
    <File Id="EXE" Source="C:\SetupProject\Includes\TargetProgram.exe" />
  </Component>
</ComponentGroup>

<CustomAction Id="EXECUTE_AFTER_FINALIZE"                  
              Execute="immediate" 
              Impersonate="no"
              Return="asyncNoWait"
              FileKey="EXE"
              ExeCommand="" />

<InstallExecuteSequence>
  <Custom Action="EXECUTE_AFTER_FINALIZE" After="InstallFinalize">NOT Installed</Custom>
</InstallExecuteSequence>
</Fragment>
15
Ibai

これは、WIX拡張機能を使用して実現できます。以下のbold/italicテキストは、EXEの正確な場所を見つける場合を処理します:)

ステップ1:拡張ライブラリをプロジェクトに追加します

コマンドラインでWiXを使用している場合は、キャンドルとライトのコマンドラインに次を追加する必要があります。

-ext WixUIExtension -ext WixUtilExtension

Visual Studioを使用している場合は、[参照の追加]ダイアログを使用して拡張機能を追加できます。

Right click on your project in Solution Explorer and select Add Reference...
Select the WixUIExtension.dll Assembly from the list and click Add
Select the WixUtilExtension.dll Assembly from the list and click Add
Close the Add Reference dialog

ステップ2:インストーラーにUIを追加します

WiX Minimal UIシーケンスには、オプションのチェックボックスを備えた完成したダイアログを含む基本的なダイアログセットが含まれています。プロジェクトにシーケンスを含めるには、<Product>要素内の任意の場所に次のスニペットを追加します。

<UI>
    <UIRef Id="WixUI_Minimal" />
</UI>

インストーラーの最後の画面にチェックボックスを表示するには、<Product>要素内の任意の場所に次のスニペットを含めます。

<Property Id="WIXUI_EXITDIALOGOPTIONALCHECKBOXTEXT" Value="Launch My Application Name" />

WIXUI_EXITDIALOGOPTIONALCHECKBOXTEXTプロパティは、設定されるとチェックボックスを表示し、指定された値をチェックボックスラベルとして使用する標準のUIシーケンスによって提供されます。

ステップ3:カスタムアクションを含める

カスタムアクションは、<CustomAction>要素を使用してWiXプロジェクトに含まれます。アプリケーションの実行は、WixShellExecTargetカスタムアクションを使用して実行されます。 Windowsインストーラーにカスタムアクションについて通知し、そのプロパティを設定するには、プロジェクトの<Product>要素内の任意の場所に以下を含めます。

<Property Id="WixShellExecTarget" Value="[#myapplication.exe]" />
<CustomAction Id="LaunchApplication" BinaryKey="WixCA" DllEntry="WixShellExec" Impersonate="yes" />

Property要素は、WixShellExecTargetをインストールされたアプリケーションの場所に設定します。 WixShellExecTargetは、WixShellExecカスタムアクションが実行するファイルの場所に設定されることを期待するプロパティIDです。 ***

Valueプロパティは、特殊文字#を使用して、IDがmyapplication.exeのファイルの完全にインストールされたパスを検索するようにWiXに指示します。


CustomAction要素には、インストーラーのアクションが含まれます。一意のIDが与えられ、BinaryKeyプロパティとDllEntryプロパティは、カスタムアクションのアセンブリとエントリポイントを示します。 Impersonateプロパティは、インストールユーザーとしてカスタムアクションを実行するようにWindowsインストーラーに指示します。

ステップ4:カスタムアクションをトリガーします

手順3のように、カスタムアクションを含めるだけでは、カスタムアクションを実行するのに十分ではありません。カスタムアクションをいつトリガーするかについても、Windowsインストーラーに通知する必要があります。これは、<Publish>要素を使用して、ユーザーがUIダイアログの最後のページで[完了]ボタンをクリックしたときに実行されるアクションに追加することで実行されます。 Publish要素は、手順2の<UI>要素内に含まれている必要があり、次のようになります。

<Publish Dialog="ExitDialog"
    Control="Finish" 
    Event="DoAction" 
    Value="LaunchApplication">WIXUI_EXITDIALOGOPTIONALCHECKBOX = 1 and NOT Installed</Publish>

Dialogプロパティは、カスタムアクションがアタッチされるダイアログ(この場合はExitDialog)を指定します。 Controlプロパティは、ダイアログの[完了]ボタンがカスタムアクションをトリガーすることを指定します。 Eventプロパティは、ボタンがクリックされたときにカスタムアクションを実行する必要があることを示し、Valueプロパティは、手順3に含まれるカスタムアクションを指定します。要素の条件により、手順2のチェックボックスがオンになっていない限り、アクションは実行されません。アプリケーションは実際にインストールされました(削除または修復されるのではなく)。

詳細については、このリンクを確認してください。 インストール後にexeを実行する方法 。同じ答えを探している他の人のために、ここにコピーしました。

15
Isaiah4110