2011-11-29 37 views
5

Tôi hiện đang viết Trình cài đặt WIX có một số phụ thuộc vào các sản phẩm khác đang được cài đặt. Đó là trong C# và đòi hỏi sự phụ thuộc sauWIX Office Detection Extension

  • Office 2010 (bao gồm Excel/Word)
  • .NET Framework 3,5

Bây giờ cho .NET Framework tôi có thể sử dụng WixNetFxExtension trong wix để nói

<PropertyRef Id="NETFRAMEWORK35_SP_LEVEL"/> 

và sau đó tham chiếu thuộc tính này trong Điều kiện.

Có một mở rộng tương tự để làm điều này cho các phiên bản khác nhau của Office hoặc tập tin cá nhân của họ như Word, vv

Tôi biết tôi có thể sử dụng hành động tùy chỉnh để làm điều này, nhưng tôi muốn có một đơn giản là để làm điều này thay vì hơn là tạo Hành động tùy chỉnh của riêng tôi?

+3

Hãy xem ở bài này http://stackoverflow.com/questions/3266675/làm thế nào để phát hiện-cài đặt-phiên bản-of-ms-office – Ciprian

+1

Tôi đã thực sự sau một phần mở rộng để wix tôi có thể sử dụng. Tôi đã thực sự bây giờ tạo phần mở rộng của riêng tôi cho phép bạn vượt qua trong một tên ứng dụng và nó trả về phiên bản cài đặt ... Tôi sẽ đăng lên giải pháp của tôi một khi tôi đã làm sạch nó lên. –

Trả lời

-2

Tôi đã tạo WIXExtension của riêng mình cho điều này và sau đó chỉ cần gọi phương thức mở rộng OfficeVersion ("Word") để cài đặt phiên bản từ v.v.

<Property Id="WORD_VERSION" Value="$(myextension.OfficeVersion(Word))" /> 

Sau đó tôi có thể đặt Điều kiện để chỉ cài đặt ứng dụng nếu phiên bản lớn hơn 10 chẳng hạn.

<Condition Message="This setup requires Word xxxx and Excel xxxx or greater"> 
    <![CDATA[Installed OR (WORD_VERSION AND EXCEL_VERSION >= "10")]]> 
</Condition> 

Sau đó, tôi tự do viết OfficeVersion của mình để trả lại phiên bản của bất kỳ ứng dụng nào tôi gửi vào đó.

Có một nơi trong registry tôi phát hiện ra rằng giữ thông tin này cho các ứng dụng văn phòng

HKLM\Software\Classes\Word.Application\CurVer 
HKLM\Software\Classes\Excel.Application\CurVer 

, vv

+0

Bạn đã bao giờ xuất bản tiện ích của mình ở bất kỳ đâu? Nó sẽ thực sự mát mẻ để tránh tất cả các hack registry thủ công. Cảm ơn! – BrainSlugs83

+0

Đó là một chút quá mức (trên thiết kế) để viết này như là một phần mở rộng nếu bạn không chia sẻ nó với thế giới. Một mảnh đơn giản được tái sử dụng bởi tất cả các trình cài đặt của bạn trong nội bộ sẽ có đủ điều kiện. –

+0

Tôi có thể tìm tiện ích của bạn ở đâu. Câu trả lời này hoàn toàn không thể sử dụng được nếu không biết cách hoạt động của tiện ích. –

6

Sử dụng câu trả lời được đưa ra bởi @Ciprian, bạn có thể chỉ cần đặt thuộc tính, sau đó có điều kiện khởi chạy dựa trên thuộc tính.

<Property Id="OFFICEPATH"> 
    <RegistrySearch Id="OfficeReg" Root="HKLM" Key="SOFTWARE\Microsoft\Office\14.0\Common\InstallRoot" Name="Path" Type="raw" /> 
</Property> 

<Condition Message="This application requires Microsoft Office. Please install Office then run this installer again."> 
     <![CDATA[Installed OR (OFFICEPATH)]]> 
    </Condition> 
+1

Cảm ơn câu trả lời, tôi đã thực sự sau khi tìm nạp phiên bản hiện tại được cài đặt của một ứng dụng, không phải truy vấn cho một khóa registry đã biết. Tôi đã giải quyết điều này bằng cách tạo phần mở rộng wix của riêng tôi cho phép bạn chuyển tên ứng dụng và nó cho bạn biết phiên bản nào được cài đặt –

+0

có hoạt động với tất cả các phiên bản của văn phòng không? –

+0

@JoeHealy Xem: http://stackoverflow.com/questions/3266675/how-to-detect-installed-version-of-ms-office liệt kê tối đa 2016 –