0

鉴于使用 VS2010 安装项目生成的安装程序,我想在不更改名称的情况下将 .NET DLL 换成另一个。

我已经msi根据这个问题更改了文件,换出了“二进制”表中条目的内容。

我使用 Orca 找到了有问题的文件。它驻留在唯一的cabinet 文件中。我在“媒体”表中找到了这个文件柜文件。我不确定如何更改此压缩文件 (API),并且我怀疑我也必须更改 MSI 数据库中的一些信息(“MsiAssemblyName”表中程序集的“ProcessorArchitecture”记录)。

理由:我正在为 Autodesk Revit 2011 插件制作安装程序。这些是使用RevitAddinUtility.dll必须与安装程序捆绑在一起的程序集注册的。该程序集有两种形式,一种用于 32 位安装,另一种用于 64 位安装。创建安装程序时,我需要换入正确的版本,以避免编写多个安装程序。

4

2 回答 2

1

查看这篇文章以获得更简单的方法来实现您的目标:

适用于 32 位和 64 位系统的 RevitAddInUtility

于 2010-08-24T14:58:15.273 回答
0

这是我同时使用的解决方法:

  • 添加两个文件,一个命名RevitAddinUtility.dll另一个RevitAddinUtility64.dll
  • 在 PostBuild-Event 中,询问用户安装项目是否应为 64 位。
  • 如果是,则更改文件的名称:

    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
    
于 2010-08-24T13:35:59.693 回答