2011-06-29 189 views
7

我已經多次看到這個問題,但沒有一個答案似乎適用於我。我明顯錯過了一些基本的東西,但我似乎無法找到它是什麼!我只用了幾天的WiX,所以我對它仍然很陌生。安裝前安裝WiX檢查文件

基本上,我已經構建了一個現有產品的插件,並且我希望在安裝插件之前檢查產品是否已安裝。我認爲最簡單的方法是檢查主要的可執行文件是否在正確的目錄中。

我相關的代碼至今:

<Property Id="FILEEXISTS"> 
    <DirectorySearch Id="CheckFileDir" Path="INSTALLDIR" Depth="0"> 
    <FileSearch Id="CheckFile" Name="main.exe" /> 
    </DirectorySearch> 
</Property> 

<Condition Message="File does exist.">NOT FILEEXISTS</Condition> 

哪裏INSTALLDIR是目錄,其中MAIN.EXE應該和嵌套Directory標籤定義的Id

回答

5

在用戶可以通過MSI對話框設置安裝文件夾之前執行搜索。所以這種方法不會按照你想要的方式工作。

如果要檢查安裝文件夾中的文件,我建議通過DoAction控件事件執行UI自定義操作。該事件可以通過文件夾選擇對話框上的下一步按鈕觸發。

對此沒有預定義的自定義操作,因此您需要使用自定義代碼編寫一個自定義操作。它應該是一個接收安裝句柄的DLL或VBScript。你可以在這裏找到一個小教程:http://www.codeproject.com/KB/install/msicustomaction.aspx

+1

好點,Cosmin!我想在這種情況下INSTALLDIR本身應該在註冊表中進行搜索,主要應用程序安裝將它放在... –

+0

是的,從註冊表中檢索舊的安裝路徑是一個好主意。 –

+0

嗨,謝謝你。我明白爲什麼現在。我將更改爲註冊表搜索以獲得更完整解決方案的路徑。與此同時,我通過將@Path更改爲「[ProgramFilesFolder] Manufacturer/ProductFolder」並將條件改爲「FILEEXISTS」而非「NOT FILEEXISTS」 – Chris

1

我想你錯過了@Path中INSTALLDIR的方括號[]。另外,@ Depth = 0看起來很可疑,只是爲了簡單的搜索而省略了這個屬性,它應該默認爲1,這是您通常需要在目錄中查找文件所需的內容。

希望有所幫助,但要嚴謹,您的問題不包含真正的問題。很難理解您是否收到任何錯誤,或者條件不起作用...

+0

對不起,它的條件不起作用。無論文件'main.exe'是否存在,應用程序仍然會安裝。我嘗試了@Path和沒有[],並試圖省略@Depth,但無濟於事。即使文件不存在,目錄是否仍然存在,這有什麼關係嗎?乾杯 – Chris

+0

我不確定你是什麼意思,但FILEEXISTS屬性將被設置,只有當文件在你正在搜索的文件夾中找到的時候。順便說一句,檢查日誌文件以瞭解FILEEXISTS屬性是否設置以及什麼是價值 –