2015-02-11 81 views
1

我正在使用Wix安裝應用程序。這裏的訣竅是應用程序正在安裝在另一個第三方應用程序之上。 我正在使用引導程序安裝兩者。WiX DLL組件拒絕安裝

我在上面安裝的應用程序有一個我們在我們的應用程序中定製的DLL,所以我需要覆蓋原來的DLL。

發生什麼事是我們的應用程序安裝程序似乎拒絕安裝DLL。該日誌在InstallValidate步驟中顯示了這一點:

Component:DotEditPanels.dll;安裝:缺席;要求:本地;行動:空

我已經嘗試了各種各樣的事情,使這種情況發生。我開始使用組件中的A標籤來刪除原始DLL,然後是a來安裝它。

正如您在上面所看到的,組件正在被跳過。

然後我使用自定義操作來刪除原始DLL,該工作正常,只用組​​件中的。一樣。

嘗試一些事情,組件目前看起來是這樣的:

<Component Id="DotEditPanels.dll" Guid="*" NeverOverwrite="no" SharedDllRefCount="yes"> 
 
    <File Id="filF8E7A8CEDC214A73A82277F1BA3B677F" KeyPath="yes" Source="..\..\DotEditPanels-8.1-FP2\bin\$(var.Configuration)\DotEditPanels.dll" /> 
 
</Component>

所有我需要的是這個新的DLL即可放下,我似乎無法到使安裝程序做到這一點。有任何想法嗎?

+0

只需要注意一點:我們定製的DLL在其程序集信息「4.0.0。」中使用了我們的產品版本,而原始文件的ITS版本號爲「8.1.0.7」 - 我認爲問題是由於我們的文件版本號較低,但我不知道如何避開它。 – 2015-02-11 17:12:29

回答

1

文件覆蓋規則基於文件版本,所以如果您的文件版本小於安裝文件的版本,那就是明顯的解釋。此規則是修補程序,修補程序,服務包等的基礎,因此如果您的版本控制正在執行,現有版本應該比您的新版本更新。假設也是這樣的Dll與可能已經安裝的舊應用程序兼容。

無論如何,你提到一個程序集,所以如果它是託管代碼,那麼你可以將AssemblyFileVersion設置爲覆蓋現有Dll的版本。否則它默認爲程序集版本。如果您需要保持程序集版本相同,因爲客戶端綁定了它們,它們仍然可以,然後使用文件版本來表示更高版本並覆蓋舊版本。

-1

我想的很多。

所以,我居然「被騙」了。我將該DLL添加爲二進制對象,然後使用自定義操作刪除原始DLL,並從安裝程序數據庫的二進制對象中讀取新的DLL,並將其寫入適當的位置。

是的,我知道這可能不是「猶太教」,但它是爲我的目的完成工作。