2010-12-10 142 views
2

我有必須安裝到我的客戶計算機上的第三方.DLL的更新。我們目前採用通過MSI在Visual Studio 2010中創建的自動安裝Visual Studio安裝項目 - 強制安裝.DLL?

不幸的是,第三方.DLL的版本不正確,而且它的文件版本沒有被提供程序增加(它們只增加了程序集版本)。第三方提供商是微軟,所以等待他們解決這個問題是不現實的。我們需要現在和在一個MSI更新中爲新的.DLL獲取新的.DLL。現在,微星更新不覆蓋.DLL

即使文件版本匹配,VS2010安裝項目中是否有強制覆蓋.DLL的方法?

回答

1

如果你願意做msi postbuild調整,你可以點擊File表並做「版本說謊」。另一個想法是不要將該DLL放入您的安裝中。從Microsoft找到一個安裝程序(如果存在),可以將其放入引導程序或創建自己的安裝程序,並使用AMUS而不是OMUS作爲版本規則。

+0

不能在包中包含.DLL。無法使用MSM,無論如何我都無法更改開關安裝參數。自動更新代碼已經在現場運行。運行時,它會使用基本上進行靜默升級的命令行運行。你能否詳細說明「版本說謊」? – Igorek 2010-12-10 22:20:17

+0

版本說謊是您更新文件表格以誘使MSI認爲它具有更新的版本,然後它實際上有。有一些小問題,但基本上它會給你一個總是覆蓋單個組件。真正的解決方案是遵循恰當的供應鏈管理實踐與您的資源(是的,可悲的是,這是我們在這裏討論的微軟)。 – 2010-12-10 23:55:56

+0

欣賞進一步的闡述,但我不確定如何通過編程方式來切換版本的問題。谷歌沒有太多的幫助。你能提供一些鏈接,說明如何去做這件事?謝謝 – Igorek 2010-12-11 03:24:27

0

難道你不能只是將文件作爲'文件'添加到你的安裝程序,並將其與其他文件一起安裝?不要將其設置爲項目輸出或任何固定安裝操作。轉到文件部分並右鍵單擊「應用程序文件」文件夾,然後說>添加文件。導航到您想要的文件並選擇它。

+0

編號.MSI有一個稱爲文件成本的過程,它看起來像是文件版本(AssemblyFileVersion)而不是AssemblyVersion屬性。如果舊版本和新版本的DLL具有相同的版本號,即使它們不同,MSI也不會覆蓋它。 – 2010-12-10 21:25:58

+0

即使你明確地告訴它複製文件?您可以創建一個自定義安裝程序類,從MSI創建的臨時文件夾複製DLL,然後在複製之後刪除該文件夾?它現在越來越icky的感覺,雖然..... – 2010-12-10 21:28:14

+0

我試圖將文件作爲常規文件放入包中,並從輸出中排除它。它沒有被部署在舊版本上。 – Igorek 2010-12-10 22:18:44