При создании проекта установки Visual Studio 2010 с CustomAction в системах x64 Visual Studio включает в себя неправильную версию InstallUtilLib.dll
: он устанавливает 32-разрядную оболочку, которая не будет работать для пользовательских действий, скомпилированных как 64-разрядные (требование в мой случай, так как это зависит от 64-битных собственных dll).
Установка такого .msi
приводит к исключению System.BadImageFormat
.
Согласно этой записи (64-разрядные управляемые настраиваемые действия с 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).