在x64系統上使用CustomAction構建Visual Studio 2010安裝項目時,Visual Studio包含InstallUtilLib.dll
的錯誤版本:它安裝32位墊片,這對於編譯爲64位的CustomActions不起作用(在我的情況下,因爲它取決於64位本地dll)。如何修改內容/將.msi文件的二進制文件替換爲構建後步驟?
安裝這樣的.msi
會導致System.BadImageFormat
異常。
根據this post (64-bit Managed Custom Actions with Visual Studio),解決方法是打開.msi
的結果orca.exe
並替換二進制「InstallUtil」。
我想自動執行此操作。有任何想法嗎?
編輯:基於由mohlsen提供的答案,我添加下面的腳本解決方案(不安裝項目本身,文件添加到安裝項目進入MSI ...):
Option Explicit
rem -----------------------------------------------------------
rem Setup_PostBuildEvent_x64.vbs
rem
rem Patch an msi with the 64bit version of InstallUtilLib.dll
rem to allow x64 built managed CustomActions.
rem -----------------------------------------------------------
Const msiOpenDatabaseModeTransact = 1
Const msiViewModifyAssign = 3
rem path to the 64bit version of InstallUtilLib.dll
Const INSTALL_UTIL_LIB_PATH = "C:\Windows\Microsoft.NET\Framework64\v2.0.50727\InstallUtilLib.dll"
Dim installer : Set installer = Wscript.CreateObject("WindowsInstaller.Installer")
Dim sqlQuery : sqlQuery = "SELECT `Name`, `Data` FROM Binary"
Dim database
Set database = installer.OpenDatabase(Wscript.Arguments(0), msiOpenDatabaseModeTransact)
Dim view : Set view = database.OpenView(sqlQuery)
Dim record : Set record = installer.CreateRecord(2)
record.StringData(1) = "InstallUtil"
view.Execute record
record.SetStream 2, INSTALL_UTIL_LIB_PATH
view.Modify msiViewModifyAssign, record
database.Commit
Set view = Nothing
Set database = Nothing
接下來,我編輯的設置項目屬性:我設置PostBuildEvent
屬性:
wscript.exe "$(ProjectDir)\..\Setup_PostBuildEvent_x64.vbs" $(BuiltOuputPath)
注:右鍵單擊搜索解決方案安裝項目然後選擇「屬性」打開錯誤的對話框(「屬性頁面」)。你想要「屬性窗口」(CTRL + W,P)。
唉!必須使用「rem」而不是'評論才能使語法突出顯示不會太多...... – 2010-07-16 08:29:05