我有一個編譯爲x86,amd64和Itanium的windows服務exe文件。我正在嘗試構建一個用於安裝此服務的單個x86 WiX/MSI安裝程序。安裝程序有三個具有體系結構特定條件的組件(例如,<Condition>NOT VersionNT64</Condition>
用於檢測x86),因此只有其中一個組件安裝在任何給定的體系結構中。這些組件安裝exe的x86,x64或Itanium版本。在多平臺WiX安裝程序中安裝依賴於架構的服務
這一切都正常工作,正確的二進制文件安裝在三個平臺上。
下一步是設置使用ServiceInstall
標籤我的exe文件在Windows服務,這是我們遇到麻煩:顯然ServiceInstall
標籤的Name
屬性必須是WiX的文件中是唯一的。我想致電該服務,例如FooBar
,但這是不允許的 - 由於名稱衝突,WiX文件無法編譯。
作爲一種解決方法,我可以有與架構相關的服務名稱,例如FooBar_ia64
,但這對我來說似乎很難看,再加上代碼庫中有許多關於服務名稱的假設,所以如果我更改服務名稱,我將不得不在代碼庫中找到並修改所有這些位置。
我試過ServiceInstall
移動到它自己的Component
,將在所有三個架構來安裝,但ServiceInstall
標籤顯然隱含引用在同一Component
,這樣沒有任何工作定義的File
標籤。
我也意識到我可以爲每個架構生成一個安裝程序,從而避免安裝程序中的任何條件,我的問題就會消失。但我真的不喜歡有三個安裝者的想法,當我如此接近爲所有三種架構提供單一安裝程序時:-)
任何其他技巧來解決此問題?
以防萬一您還沒有弄清楚這是否是遺留下來的代碼庫,我正在嘗試爲它構建一個新的安裝程序來替換現有的舊版安裝程序。