2009-05-12 48 views
5

Tôi muốn kiểm tra xem Crystal Reports Basic cho Visual Studio 2008 có được cài đặt như một điều kiện cho gói cài đặt của riêng tôi không.Cách kiểm tra gói đã cài đặt trong WiX 3.0?

Tôi thấy điều này trong mô tả bootstrapper cho sản phẩm này (C: \ Program Files \ Microsoft SDKs \ Windows \ v6.0A \ Bootstrapper \ Packages \ 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> 

Đang cố gắng để bắt chước hành vi này trong WiX, tôi đã làm như sau:

<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> 

Nhưng dường như ComponentSearch đang tìm kiếm các thành phần gói (file, thư mục) mà có id riêng của họ, chứ không phải tìm kiếm gói riêng của mình.

Vậy làm cách nào tôi có thể thực hiện việc này?

Trả lời

1

API trình cài đặt Windows có chức năng MsiQueryProductState trong msi.dll để thực hiện việc này. Thật không may, bạn sẽ phải viết một hành động tùy chỉnh để sử dụng điều này trong trình cài đặt của bạn. Các hội đồng trong C:\Program Files\Windows Installer XML v3\SDK có thể làm cho điều này dễ dàng hơn.

+0

Thú vị, nhưng tôi không nghĩ rằng tôi sẽ có thời gian để nghiên cứu kỹ các hành động tùy chỉnh. Bây giờ. – Mac

3

Như đã đề cập here:

Thử tìm kiếm registry dưới HKLM\Software\Microsoft\Windows\CurrentVersion\Uninstall\{productcode}. Cũng xem xét tìm kiếm theo HKCU nếu cả sản phẩm của bạn và sự phụ thuộc là sản phẩm cho mỗi người dùng.

này đi như thế này:

<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 để tránh các hành động tùy chỉnh nhưng hãy cẩn thận: AFAIK này không có giấy tờ và do đó về nguyên tắc không được hỗ trợ. Bài viết sau đây của Raymond Chen đến với tâm trí: http://blogs.msdn.com/oldnewthing/archive/2003/11/03/55532.aspx –

+0

Cảm ơn bạn đã chỉ ra điều này. – Mac

+0

Một giải pháp được hỗ trợ 100% mà không có hành động tùy chỉnh đã được đề xuất ở đây: http://article.gmane.org/gmane.comp.windows.devel.wix.user/38263 Nhưng tôi không có thời gian để kiểm tra nó ngay bây giờ, và tôi sẽ cần nâng cấp GUID cho CR, mà tôi chưa biết làm thế nào để lấy. – Mac

2

Bạn có thể sử dụng 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> 

Bây giờ chút khó khăn là tìm Nâng cấp Mã (quy định tại Id thuộc tính ở trên). Nếu bạn có gói MSI, chỉ cần nhìn vào nó bằng Orca. Nếu bạn không - hãy thử this solution.

Các vấn đề liên quan