0

WIXを使用してビルドされたMSIパッケージも含むインストーラーを作成しています。msiexecを実行した後にリターンコードを確認し、いくつかのエラーコードをスキップします。たとえば、リターンコードが1638(製品はすでにインストールされている)の場合、ユーザーはエラーを受け取らないはずです。

ただし、古いバージョンの製品がインストールされている場合、戻りコードは1603(不明なエラー)です。私もこの状況をスキップしたい(ユーザーはすでに新しいバージョンを入手しています)

Wixコードは

<Upgrade Id="<GUID>">
    <UpgradeVersion Minimum="$(var.product_version)" OnlyDetect="yes" Property="NEWERFOUND" />
    <UpgradeVersion Minimum="0.1.0" IncludeMinimum="yes" Maximum="$(var.product_version)" IncludeMaximum="no" Property="SELFFOUND" />
</Upgrade>

<MajorUpgrade DowngradeErrorMessage=You have installed newer version $(var.product_name)." />

問題は、SELFFOUNDまたはNEWERFOUNDプロパティがアクティブ化されているときに、1603以外のコードを返す方法です。

更新:リターンコードに影響を与えたくありませんでした。一般的な致命的なエラーの代わりに適切なコードを取得したいと思います。

4

1 に答える 1

2

のリターン コードを制御することはできませんmsiexec.exe。その戻りコードは文書化されており、リストは包括的です。サービスは、インストールのステータスに基づいて終了コードを決定します。

更新:私が提案できる唯一のことは、データベース関数を直接使用することです:

  1. MsiOpenPackage、 と
  2. MsiDoAction("FindRelatedProducts")Upgrade tableを処理してプロパティFindRelatedProductsを評価するアクションを実行します。SELFFOUNDNEWERFOUND
  3. 次に、 を使用してプロパティを分析しますMsiGetProperty
  4. でパッケージを閉じますMsiCloseHandle

SELFFOUND得られたとの値を使用してNEWERFOUND、製品をインストールする必要があるかどうかを判断できます。はいの場合は、実行msiexec.exeまたは使用できますMsiInstallProduct

免責事項: 私はこのようなことを試みたことがなく、うまくいくかどうかわかりません。そうすべきですが、簡単には見えません。

于 2012-07-09T18:48:35.727 に答える