コマンドラインを実行して、次のように機能するカスタムアクションを取得しました。
<CustomAction Id="OurAction"
FileKey="OurInstalledExe.exe"
ExeCommand="our command line args"
Execute="deferred"
Return="check" />
問題は、コマンドの実行時にユーザーにコンソールポップアップが表示されることです。
コマンドラインではUACの昇格が必要ですが、ユーザーの操作は必要ありません。また、セットアップでファイルをインストールします。カスタムアクションはAfter = "InstallFiles"を実行します。
ユーザーにコンソールが表示されないようにするにはどうすればよいですか?
UAC昇格が必要な場合は、それが遅延実行CAであることを確認する必要があることに注意してください。これは、コマンドライン引数が追加されたマニュアルの例です。
<CustomAction Id="QtExecDeferredExampleWithProperty_Cmd" Property="QtExecDeferredExampleWithProperty"
Value=""[#MyExecutable.exe]" /arguments" Execute="immediate"/>
<CustomAction Id="QtExecDeferredExampleWithProperty" BinaryKey="WixCA" DllEntry="CAQuietExec"
Execute="deferred" Return="check" Impersonate="no"/>
.
.
.
<InstallExecuteSequence>
<Custom Action="QtExecDeferredExampleWithProperty_Cmd" After="CostFinalize"/>
<Custom Action="QtExecDeferredExampleWithProperty" After="TheActionYouWantItAfter"/>
</InstallExecuteSequence>
EXEファイルのソースコードがある場合、これが実行できます。 EXEプロジェクトをコンソールアプリケーションの代わりにWin32アプリケーションプロジェクトにします。
EXEファイルのソースコードを変更できない場合は、次の方法で変更できます。
実行可能ファイルを起動する前にコンソールアプリとしてマークする必要があるという点で、鶏と卵の問題が少しあります。コンソールがポップアップせずにそのようなexeを起動する場合は、正しいフラグ。インストーラがこれらを提供できない場合は、間に3つ目の.exeを使用することが可能です。たとえば、Keybaseインストーラーは keybaserq.exeと呼ばれるこの小さなユーティリティ を起動して、点滅する黒いウィンドウのないバックグラウンドで永続的なコンソールアプリを実行します。それはオープンソースであり、あなたは見ることができます Keybaseインストーラーがそれをどのように使用するか -点滅するコンソールウィンドウはありません。
Cmd.exeの2番目のコマンド「exit」を追加するだけです
ExeCommand="[SystemFolder]cmd.exe /C start MyExe.exe & exit"
希望、それはあなたを助けます