1

Wix project簡単な .txt サンプル ファイルのインストールを試みる を作成しました。ただし、前提として、以前のアプリケーションをアンインストールしたい。

msiexecそうするために、次のように書くだけで製品をアンインストールできることを私は知っています。

msiexec /x {PRODUCT_CODE}

コマンドラインで。

幸いなことに、私はこれを知っているので、インストールを開始する前にその製品をアンインストールPRODUCT_CODEするために、次のように作成しようとしました。CustomAction

<CustomAction Id="PropertyAssign" Property="SilentLaunch" Value="msiexec.exe /x {EA29682C-7DA1-441C-BF3E-702491F59258}" Execute="immediate" />
<CustomAction Id="SilentLaunch" BinaryKey="WixCA" DllEntry="CAQuietExec" Execute="deferred" Return="check" Impersonate="no" />

<InstallUISequence>
  <Custom Action="PropertyAssign" After="CostFinalize" />
  <Custom Action="SilentLaunch" After="PropertyAssign" />
</InstallUISequence>

しかし、を実行すると、コード2762.msiで予期しないエラーが発生したと表示され、インストールが終了します。

間違いがその行にあることはわかっています。まるでそれを消去したかのように、すべてがうまくいきます。

そのコマンドラインを間違いなく実行する方法について何か考えはありますか?

4

1 に答える 1

3

UI シーケンスによってマシンの状態が変更されることはありません。データの収集、検証、およびユーザーへの報告のみを行う必要があります。すべての変更は、実行シーケンスで行う必要があります。

Windows / MSI ( _MSIExecute ) には、マシンごとに 1 つの実行シーケンスを強制するミューテックスがあります。したがって、MSI から msiexec を呼び出すことはできません。ただし、他の製品を検出して削除するメジャー アップグレード ルールを作成することはできます。Windows インストーラーの標準アクション RemoveExisitingProducts は、自分自身の以前のバージョンだけでなく、すべての MSI をアンインストールできます。

于 2013-09-26T10:57:19.177 に答える