web-dev-qa-db-ja.com

WiX-CustomAction ExeCommand-コンソールを非表示

コマンドラインを実行して、次のように機能するカスタムアクションを取得しました。

<CustomAction Id="OurAction" 
              FileKey="OurInstalledExe.exe"
              ExeCommand="our command line args" 
              Execute="deferred" 
              Return="check" />

問題は、コマンドの実行時にユーザーにコンソールポップアップが表示されることです。

コマンドラインではUACの昇格が必要ですが、ユーザーの操作は必要ありません。また、セットアップでファイルをインストールします。カスタムアクションはAfter = "InstallFiles"を実行します。

ユーザーにコンソールが表示されないようにするにはどうすればよいですか?

24
jonathanpeppers

UAC昇格が必要な場合は、それが遅延実行CAであることを確認する必要があることに注意してください。これは、コマンドライン引数が追加されたマニュアルの例です。

<CustomAction Id="QtExecDeferredExampleWithProperty_Cmd" Property="QtExecDeferredExampleWithProperty"
              Value="&quot;[#MyExecutable.exe]&quot; /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>
7
saschabeaumont

EXEファイルのソースコードがある場合、これが実行できます。 EXEプロジェクトをコンソールアプリケーションの代わりにWin32アプリケーションプロジェクトにします。

EXEファイルのソースコードを変更できない場合は、次の方法で変更できます。

  1. CustomAction DLLの作成
  2. コンソールウィンドウを非表示にして、DLL(WiXから)でCustomActionを呼び出してプロセスを実行します。
2
SysAdmin

実行可能ファイルを起動する前にコンソールアプリとしてマークする必要があるという点で、鶏と卵の問題が少しあります。コンソールがポップアップせずにそのようなexeを起動する場合は、正しいフラグ。インストーラがこれらを提供できない場合は、間に3つ目の.exeを使用することが可能です。たとえば、Keybaseインストーラーは keybaserq.exeと呼ばれるこの小さなユーティリティ を起動して、点滅する黒いウィンドウのないバックグラウンドで永続的なコンソールアプリを実行します。それはオープンソースであり、あなたは見ることができます Keybaseインストーラーがそれをどのように使用するか -点滅するコンソールウィンドウはありません。

1
Steve

Cmd.exeの2番目のコマンド「exit」を追加するだけです

ExeCommand="[SystemFolder]cmd.exe /C start MyExe.exe &amp; exit"

希望、それはあなたを助けます

0
Anton Sivov