2011-05-26 43 views
2

我在VS2010中有WIX部署項目。我的應用程序需要安裝MVC 3.0。 問題是如何在安裝程序中創建啓動條件,以便檢查服務器上是否存在MVC3?如何在WIX中編寫MVC3的啓動條件?

這看起來簡單的問題,但所有的方法可以做到這一點,我知道,有問題:

1)採用標準的屬性來檢查應用程序安裝(在http://weblogs.asp.net/jacqueseloff/archive/2009/04/17/detecting-asp-net-mvc-1-0-using-wix.aspx人所示):

<Condition Message='ASP.NET MVC 3.0 is required to proceed with the installation.'>Installed OR ASP_NET_MVC_3_0</Condition> 

它總是評估爲false的問題。也許沒有這樣的屬性「ASP_NET_MVC_3_0」。 更重要的是,它甚至在MVC1.0檢查的例子中都不起作用。

2)Manual RegistrySearch WIX條件。 這裏的問題是,因爲我還沒有註冊中心節點 HKEY_LOCAL_MACHINE \ SOFTWARE \微軟\ ASP.NET \ ASP.NET MVC 3 這是第二個問題:爲什麼錯過?我絕對已經安裝了MVC 3。在此之前還有Mvc 1.0和2.0,但ASP.NET分支下沒有任何MVC節點(只有2.0.50727.0和4.0.30319.0子項)。

3)FileSearch查找MVC DLL。

<Condition Message='ASP.NET MVC 3.0 is required to proceed with the installation.'> 
    Installed OR ASP_NET_MVC_3_0_DLL 
    </Condition> 

    <Property Id='ASP_NET_MVC_3_0_DLL'> 
    <DirectorySearch Id='MVC_DLL_DIR' Path='[ProgramFilesFolder]\Microsoft ASP.NET\ASP.NET MVC 3\Assemblies'> 
     <FileSearch Id='MVC_DLL_FILE' Name='System.Web.Mvc.dll' MinVersion='3.0.20105.0'/> 
    </DirectorySearch> 
    </Property> 

但不保證MVC定位在程序文件 - 它可以在其他地方安裝。

我認爲最好的答案是爲什麼MVC安裝沒有註冊表項以及如何防止服務器上的情況。但對主要問題(發射條件)的任何其他解決方案將有所幫助。

PS:我的操作系統是Windows 7

+1

我們分發mvc dll與我們的應用程序,不要依賴它被安裝。更容易和更簡單,然後你不必用WiX搜索它。 – nickvane 2011-05-26 12:35:24

+0

謝謝,我們也考慮過這樣的變種。但是,最好找到它是否已經instatled – 2011-05-26 14:07:30

回答

1

第一個選項需要第二個選項(第一次)。您鏈接到的博客條目缺少該步驟。你需要一個RegistrySearch元素是這樣的:

​​

那麼你的屬性應該是填充。如果註冊表項丟失,那麼您需要跟進包的所有者以瞭解爲什麼他們的註冊表項沒有被寫入。

+0

謝謝,這實際上是爲什麼WIX條件不起作用的答案。關於註冊表鍵的問題我認爲是真的超出了這個話題... – 2011-06-15 07:57:55