我正在使用WIX爲Windows服務創建安裝程序。WIX篡改文件
該服務已準備好安裝(它在項目中定義了一個ServiceInstaller
)。因此,如果我使用installutil
安裝該服務,它可以很好地工作。
試圖建立一個維克斯安裝程序,我在產品上創建以下組件:
<Component ...>
<File Id="ServiceDll" Name="$(var.Scheduler.TargetFileName)" Source="$(var.Scheduler.TargetPath)"/>
<File Id="Connector" Name="Connector.dll" Source="$(var.Scheduler.TargetPath)"/>
<!-- some more dependencies -->
<ServiceInstall Id="InstallService" Name="ScheduleService" Start="auto" Type="ownProcess" ErrorControl="normal"/>
</Component>
Scheduler
是服務項目的名稱。我從wix項目中添加了對該項目的引用。 Connector.dll
是一個.Net程序集,它被複制到服務的輸出目錄,因爲它被引用。 ScheduleService
是服務名稱。
如果我運行安裝程序,則服務已成功安裝。但是,由於裝配綁定錯誤而導致啓動失敗:
The service failed to start. System.IO.FileLoadException. The file or assembly "Connector, Version=1.0.0.0, Culture=neutral, PublickKeyToken=null" or a dependency could not be found. The located assembly's manifest definition does not match the assembly reference (HRESULT: 0x80131040). at ScheduleService.OnStart()
我想知道爲什麼可能會出現不匹配。所以我仔細看了一下這些文件。 WIX複製到安裝目錄的文件實際上與源文件不同。原始文件大小爲11,776字節,複製的文件大小爲12,800字節。如果我打開Visual Studio中的DLL文件,我得到不同的看法:
+ Original Connector.dll
+ RT_MANIFEST
1 [neutral]
+ Version
1 [neutral]
和
+ Copied Connector.dll
+ Version
1 [neutral]
所以維克斯似乎已刪除清單。如果我用原來的覆蓋複製的DLL,我又能夠啓動服務。爲什麼WIX會這樣做?更重要的是,我該如何阻止WIX篡改文件以便啓動服務?
我已經清理了解決方案併發布了重建,導致了相同的情況。
你確定你沒有建立到一個位置,然後從不同的位置抓取安裝程序的源文件? – BryanJ