Lors de la création d'un projet d'installation Visual Studio 2010 avec un système CustomAction sur x64, Visual Studio inclut la mauvaise version de InstallUtilLib.dll
: Il installe le shim 32 bits, qui ne fonctionnera pas pour CustomActions compilé en 64 bits (une exigence dans mon cas, car cela dépend des DLL natives 64 bits).Comment modifier le contenu/remplacer un fichier binaire d'un fichier .msi en tant qu'étape de post-construction?
L'installation d'un tel .msi
entraîne l'exception System.BadImageFormat
.
Selon this post (64-bit Managed Custom Actions with Visual Studio), la solution est d'ouvrir le .msi
résultant en orca.exe
et de remplacer le "InstallUtil" binaire.
Je voudrais automatiser ceci. Des idées?
EDIT: en fonction de la réponse fournie par mohlsen, j'ai ajouté le script suivant à la solution (et non le projet d'installation lui-même, en tant que fichiers ajoutés au projet d'installation aller dans le 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
Ensuite, j'édita les propriétés des projets d'installation: Je mis la propriété PostBuildEvent
à:
wscript.exe "$(ProjectDir)\..\Setup_PostBuildEvent_x64.vbs" $(BuiltOuputPath)
Remarque: Un clic droit sur le projet d'installation en solutio n Explorer puis en sélectionnant "Propriétés" ouvre le mauvais dialogue ("Pages de propriétés"). Vous voulez la "fenêtre de propriétés" (CTRL + W, P).
ugh! a dû utiliser "rem" au lieu de "pour les commentaires pour faire de la coloration syntaxique ne pas sucer trop ... –