Question

Étant donné un installateur généré avec une DLL .NET projet d'installation VS2010, je voudrais échanger avec un autre sans changer le nom.

Je suis en train de modifier le fichier déjà msi selon cette question , échanger le contenu d'une entrée dans la table "binaire".

Je trouve le fichier en question à l'aide Orca. Il réside dans le seul fichier CAB. Je trouve ce fichier CAB dans la table « médias ». Je ne sais pas comment changer ce fichier CAB (API) et je pense que je dois changer certaines informations dans la base de données MSI aussi (l'enregistrement « ProcessorArchitecture » pour l'ensemble dans la table « MsiAssemblyName »).

Justification: Je fais un programme d'installation d'un plug-in Autodesk Revit 2011. Ceux-ci sont enregistrés à l'aide d'un RevitAddinUtility.dll de montage qui doit être livré avec l'installateur. Cet ensemble se décline en deux saveurs, un pour 32 bits et un pour les installations 64 bits. Je dois échanger dans la version correcte lors de la création du programme d'installation, pour éviter d'écrire plus d'un installateur.

Était-ce utile?

La solution 2

Voici une solution que je utilise dans l'intervalle:

  • ajouter les deux fichiers, un autre nom RevitAddinUtility.dll RevitAddinUtility64.dll
  • dans le Postbuild-Event, demander à l'utilisateur si le projet d'installation devrait être pour 64bit.
  • si oui, changer les noms des fichiers:

    If 6 = MsgBox("Build for 64bit?", 4, "Setup PostBuild event for DesignPerformanceViewer") Then
        Dim installer : Set installer = Wscript.CreateObject("WindowsInstaller.Installer")
        Dim database : Set database = installer.OpenDatabase(PATH_TO_MSI, msiOpenDatabaseModeTransact)
        Dim sqlQuery : sqlQuery = "SELECT `FileName`, `Component_` FROM File"
        Dim view : Set view = database.OpenView(sqlQuery)
        view.Execute
        Dim record : Set record = view.Fetch
        While Not record Is Nothing        
            If InStr(record.StringData(1), "RevitAddInUtility.dll") Then  
                record.StringData(1) = "REVITA~2.DLL|RevitAddInUtility32.dll"
                view.Modify msiViewModifyUpdate, record    
            ElseIf InStr(record.StringData(1), "RevitAddInUtility64.dll") Then    
                record.StringData(1) = "REVITA~1.DLL|RevitAddInUtility.dll"
                view.Modify msiViewModifyUpdate, record    
            End If    
            Set record = view.Fetch
        Wend
        database.Commit   
    End If
    

Autres conseils

Commander cet article pour des moyens plus faciles à atteindre votre objectif:

RevitAddInUtility 32 et 64 bits des systèmes

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top