2009-05-12 9 views
5

Visual Studio 2008用Crystal Reports Basicが自分のインストールパッケージの条件としてインストールされていることを確認したいと思います。WiX 3.0にインストールされているパッケージをチェックする方法は?

私はこの製品のブートストラップの説明でこれを見つけた(C:\プログラムファイル\マイクロソフトのSDK \ Windowsの\ v6.0A \ブートストラップ\パッケージ\ CrystalReports10_5 \のProduct.xml):

しようとして
<InstallChecks> 
    <MsiProductCheck Property="CRVSInstalled" Product="{AA467959-A1D6-4F45-90CD-11DC57733F32}"/> 
    <MsiProductCheck Property="CRVSRunTimex86Installed" Product="{CE26F10F-C80F-4377-908B-1B7882AE2CE3}"/> 
    <MsiProductCheck Property="CRVSRunTimex64Installed" Product="{2BFA9B05-7418-4EDE-A6FC-620427BAAAA3}. "/> 
</InstallChecks> 

<Property Id="CRVSINSTALLED"> 
    <ComponentSearch Id="CRVSInstalledSearch" Guid="{AA467959-A1D6-4F45-90CD-11DC57733F32}" /> 
</Property> 
<Property Id="CRVSRUNTIMEX86INSTALLED"> 
    <ComponentSearch Id="CRVSRunTimex86InstalledSearch" Guid="{CE26F10F-C80F-4377-908B-1B7882AE2CE3}" /> 
</Property> 
<Property Id="CRVSRUNTIMEX64INSTALLED"> 
    <ComponentSearch Id="CRVSRunTimex64InstalledSearch" Guid="{2BFA9B05-7418-4EDE-A6FC-620427BAAAA3}" /> 
</Property> 
<Condition Message="!(loc.CrystalReportsRequired)">Installed OR CRVSINSTALLED OR CRVSRUNTIMEX86INSTALLED OR CRVSRUNTIMEX64INSTALLED</Condition> 

しかし、ComponentSearchが自分のIDを持っているパッケージコンポーネント(ファイル、ディレクトリ)を探しているのではなく、パッケージ自体を探しているようだ:WiXの中で、この動作を模倣し、私は次のことをやりました。

どうすればいいですか?

答えて

1

WindowsインストーラAPIはmsi.dllMsiQueryProductStateという機能があります。残念ながら、インストーラでこれを使用するカスタムアクションを記述する必要があります。 C:\Program Files\Windows Installer XML v3\SDKのアセンブリは、これをより簡単にするかもしれません。

+0

興味深いですが、カスタムアクションを掘り下げる時間がないとは思いません。今のところ。 – Mac

3

としてはhereを提案:

HKLM\Software\Microsoft\Windows\CurrentVersion\Uninstall\{productcode}下のレジストリ検索してみてください。また、製品と依存関係がユーザーごとの製品である場合は、HKCUの検索を検討してください。

これは、このように書きます:

<Property Id="CRVSINSTALLED"> 
    <RegistrySearch Id="CRVSInstalledSearch" Root="HKLM" Key="Software\Microsoft\Windows\CurrentVersion\Uninstall\{AA467959-A1D6-4F45-90CD-11DC57733F32}" Name="InstallDate" Type="raw" /> 
</Property> 
<Property Id="CRVSRUNTIMEINSTALLED"> 
    <RegistrySearch Id="CRVSRunTimeInstalledSearch" Root="HKLM" Key="Software\Microsoft\Windows\CurrentVersion\Uninstall\{CE26F10F-C80F-4377-908B-1B7882AE2CE3}" Name="InstallDate" Type="raw" /> 
</Property> 
<Property Id="CRVSRUNTIMEINSTALLED"> 
    <RegistrySearch Id="CRVSRunTimeInstalledSearch" Root="HKLM" Key="Software\Microsoft\Windows\CurrentVersion\Uninstall\{2BFA9B05-7418-4EDE-A6FC-620427BAAAA3}" Name="InstallDate" Type="raw" /> 
</Property> 
+1

+1カスタムアクションを回避するには注意してください:AFAIKこれは文書化されておらず、原則としてサポートされていません。レイモンド・チェンの次の記事が気になる:http://blogs.msdn.com/oldnewthing/archive/2003/11/03/55532.aspx –

+0

これを指摘してくれてありがとう。 – Mac

+0

カスタム動作のない100%サポートされているソリューションがここに提案されています:http://article.gmane.org/gmane.comp.windows.devel.wix.user/38263しかし、私は今すぐテストする時間がありません。 CRのアップグレードGUIDが必要です(まだ取得する方法がわかりません)。 – Mac

2

あなたは今、トリッキーなビットは、コード(上記のId属性で指定)をアップグレード見つけることですUpgrade table

<Upgrade Id="36E76465-5548-390F-955A-2776582C6A6C"> 
    <UpgradeVersion OnlyDetect="yes" Property="TFSCLIENT" Minimum="11.0.50727" /> 
</Upgrade> 
<Condition Message="ERROR: Team Explorer for Microsoft Visual Studio 2012 is not installed"> 
    Installed OR TFSCLIENT 
</Condition> 

を使用することができます。 MSIパッケージをお持ちの場合は、Orcaをご覧ください。 もしあなたがしないなら - this solutionを試してください。

関連する問題