2016-11-17 9 views
0

変数を設定し、InstallConditionの条件要素として機能する書き込みUIにチェックボックスを挿入しました。チェックされている特定のパッケージをインストールすることによって正常に動作します。しかし、修復中にこの状態が偽になり、パッケージを再インストールするのではなく、アンインストールしています。ここで私はどのように使用したか、Component_1はチェックボックスで設定された変数です。修復中にMSIパッケージがアンインストールされる

<MsiPackage SourceFile="DevKit.msi" 
       Vital="no" 
       Compressed="yes" 
       InstallCondition="Component_1" 
       Visible="yes"/> 

インストール、修復、アンインストール中に正常に動作するInstallConditionの適切な方法が必要です。

答えて

0

修復モードで実行しても、条件がfalseになることはありません。むしろ、それはInstallConditionに失敗したものとして解釈されるものに設定されていません。

製品がインストールされているかどうかを「記憶」する方法を実装する必要があります。

これを行うには、ブートストラップアプリケーションコードを変更する必要があります。あるいは、実装がはるかに簡単な明示的な方法があります。

明示的な方法では、 "exists"レジストリ検索でComponent_1プロパティを設定するだけです。

DevKit.msiインストーラは、それがインストールされていることを示すために、何らかのレジストリエントリを書き込む必要があります。あなたは、あなたのInstallCondition Component_1 = 1を作るために必要がある場合があります

<util:RegistrySearch 
    Id="DevKitInstalled" 
    Root="HKLM" 
    Key="SOFTWARE\DevKit" 
    Format="raw" 
    Value="Installed" 
    Result="exists" 
    Variable="Component_1"/> 
Component_1

のデフォルト値を取得するには、この知られているレジストリエントリのレジストリ検索を行うことができますが、私はこのことについて非常によく分かりません。

これは、OnDetectPackageCompleteを編集して関連する条件変数を1に設定することです。すべてのmsiパッケージにIDを与え、IDと同じ名前のプロパティを使用することをお勧めしますあなたは1

に設定する必要があることのPackageIDがOnDetectPackageCompleteから渡すと同じ名前の変数がある場合も、さらに良い解決策があるかもしれません、多分他の誰かが] =別の答えに

を洞察力を与えることができます
関連する問題