2011-11-29 42 views
5

我目前正在編寫一個WIX安裝程序,它對正在安裝的其他產品有一些依賴性。這是在C#中,需要以下依存WIX辦公室檢測擴展

  • 的Office 2010(包括Excel/Word)中
  • .NET Framework 3.5的

現在的.NET Framework,我可以使用WixNetFxExtension在威克斯說

<PropertyRef Id="NETFRAMEWORK35_SP_LEVEL"/> 

然後在條件中引用此屬性。

是否有類似的擴展,爲不同版本的Office或他們的個人檔案,如Word等

我知道我可以使用自定義操作要做到這一點做到這一點,但我想要一個簡單的是要做到這一點,而比創建我自己的自定義操作?

+3

請看看這個帖子http://stackoverflow.com/questions/3266675/how-to-detect-installed-version-of-ms-office – Ciprian

+1

我真的在擴展wix後可以使用。我實際上現在已經創建了自己的擴展,它允許您傳入應用程序名稱,並返回安裝的版本......一旦清理完成,我將發佈我的解決方案。 –

回答

-2

我結束了創建我自己的這個WIXExtension,然後簡單地可以打電話給我的擴展方法OfficeVersion(「道」),以獲取字的版本等安裝。

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

然後,我可以設置一個條件來只安裝應用程序,如果版本大於10例如。

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

然後我可以自由地寫我的OfficeVersion來返回我發送給它的任何應用程序的版本。

有一個在我發現註冊表的地方保留此信息Office應用程序

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

+0

你曾經在任何地方發佈過你的擴展嗎?避免所有手動註冊表黑客攻擊真的很酷。謝謝! – BrainSlugs83

+0

如果你沒有與世界分享這個東西,那麼把它寫成一個擴展名就有點過分了(超過工程設計)。一個簡單的片段被內部的所有安裝人員重複使用就足夠了。 –

+0

我在哪裏可以找到您的擴展。不知道擴展如何工作,這個答案完全無法使用。 –

6

使用@Ciprian給出的答案,你可以簡單地設置一個屬性,然後有一個基於屬性的啓動條件。

<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

感謝您的回答,我確實是在獲取已安裝的應用程序的當前版本後,並未查詢已知的註冊表項。我已經通過創建我自己的wix擴展來解決這個問題,它允許你傳入一個應用程序名稱,並告訴你安裝了哪個版本 –

+0

是否適用於所有版本的Office? –

+0

@JoeHealy查看:http://stackoverflow.com/questions/3266675/how-to-detect-installed-version-of-ms-office列出到2016 –