我們的應用程序需要最新版本的DLL才能正常運行。 DLL的路徑存儲在註冊表中。如何在Windows安裝程序中強制執行最低文件版本作爲啓動條件?強制執行註冊表值引用的最小DLL版本
到目前爲止,我有這樣的:
<Property Id="FileTest">
<RegistrySearch Id="FileSearch"
Key="SOFTWARE\Company\Product"
Name="DLLPath"
Root="HKLM"
Type="file">
<FileSearch MinVersion="1.2.3.4" />
</RegistrySearch>
</Property>
<Condition Message="!(loc.ErrorMessage)">Installed OR (FileTest)</Condition>
但維克斯不會編譯如下:
MainApp.wxs(543) : error CNDL0010 : The FileSearch/@Name attribute was not found; it is required.
的問題是我不知道該怎麼對name屬性輸入。我事先並不知道DLL的名稱,它可能是任何東西! (這就是爲什麼註冊表值是存在的!)
事實上,事實證明,「名稱」可以是任何東西 - 當FileSearch是RegistrySearch的一部分時,它會被完全忽略!在「名稱」中輸入一些亂碼,搜索仍然有效。我不知道爲什麼在這種情況下該領域仍然是必需的。順便說一下,使用方括號的方法並不奏效,因爲Signature表中的相應列只是一個Text數據類型,而不是Formatted。 – 2012-01-06 16:14:04
另一個要做的事情是在「FileSearch」元素中包含「語言」屬性,這是我缺少的。如果我搜索的版本號與發現的版本號完全匹配,則這會導致搜索失敗。 (這在簽名表文檔中都有描述。) – 2012-01-06 16:15:55
另外,不推薦LongName;它會在使用時觸發警告。 – 2012-01-06 16:16:28