2014-09-19 32 views
2

最近我們發現在我們的Wix腳本中有一個重複組件GUID。常見的GUID用於具有不同名稱但位於同一目錄中的2個文件。我在網上搜索發現,這可能會導致後來的問題,但無法找到任何令人滿意的解決同樣的問題。安全解決Wix中的重複組件GUID

是否有解決此問題的安全方法?謝謝。

回答

1

你能重命名文件並給他們一個新的guid每個?這是最安全的方法 - 它解除了所有引用計數問題。通過重命名文件,可爲每個文件創建一個新的絕對路徑(路徑+文件名),而Windows Installer本質上通過分配一個GUID來引用絕對路徑。

該概念的進一步解釋。 推薦閱讀,我認爲這將是更清晰的:Change my component GUID in wix?

注意:小心重新命名dll文件,如果你正在寫C/C++使用大量的delay load

+0

@Glytzkof感謝您的快速響應,我們將嘗試這種方法! – whywhywhy 2014-09-19 09:48:02

+0

另請注意,[**可以省略Wix xml文件**中的許多源屬性](http://stackoverflow.com/a/24769965/129130),並依賴於Wix默認值而不是硬編碼值。 – 2014-09-19 10:01:33

+0

出於好奇,如果它是一個無法重命名的.net文件,我們將如何做? – whywhywhy 2014-09-19 10:18:48

1

我會將此添加爲另一個答案,因爲它實際上是「解決」問題的另一種方法。

可以「解決這個問題」通過分配兩個新的GUID的文件和使用重大升級RemoveExistingProductsInstallExecuteSequence早期對「脫鉤論」,從彼此完全兩種產品版本。 這種升級形式有效地忽略了Windows安裝程序的組件規則並安裝升級,就好像舊版本從不存在一樣。許多公司標準化這種類型的升級方案,雖然它既低效又慢,因爲它消除了組件引用導致的大多數問題。拇指的

重要的規則:不小的升級或補丁程序時,可以使用你不做組件正確引用。我想大多數Wix用戶都知道這一點。

(當兩個文件共享一個guid時,在技術上可以給一個文件一個新的guid,但是我從來不會這樣做以避免遺留問題重新鋪路,特別是舊式遺留共享引用計數可能最終會干擾:HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\SharedDLLs這個標誌寫入如果Wix componentmsidbComponentAttributesSharedDllRefCount位設置):

enter image description here

這是Windows安裝程序之前計算的參考,並且它也以「溝通」所使用的Windows安裝程序使用傳統風格的安裝程序,否則可能會刪除由W引用計數的文件indows安裝程序。

我不會爲任何我不安裝到共享位置的文件設置此標誌,我相信這是一個很好的方法。 Installshield用於爲所有組件設置此共享dll屬性,這會導致許多奇怪的雜散文件在卸載時被留下。換句話說:只有在安裝到真正共享的位置時才啓用此標誌,因爲標誌通常比解決方案更具問題。

如果您在自己的應用程序之間共享文件,並且不需要可用於第三方應用程序的文件,只需將它們安裝到ProgramFiles並通過Wix包含文件共享它們即可。

+0

感謝您的回覆! – whywhywhy 2014-09-19 10:58:15