鉴于使用VS2010安装项目生成的安装程序,我想在不更改名称的情况下将.NET DLL替换为另一个。
我已经根据this question更改了msi
文件,更换了“二进制”表中条目的内容。
我使用Orca找到了有问题的文件。它驻留在唯一的cabinet文件中。我已将此cabinet文件放在“Media”表中。我不知道如何更改此cabinet文件(API),我怀疑我必须更改MSI数据库中的某些信息(“MsiAssemblyName”表中的程序集的“ProcessorArchitecture”记录)。
理由:我正在为Autodesk Revit 2011插件制作安装程序。这些是使用程序集RevitAddinUtility.dll
注册的,必须与安装程序捆绑在一起。这个程序集有两种形式,一种用于32位,另一种用于64位安装。我需要在创建安装程序时交换正确的版本,以避免编写多个安装程序。
答案 0 :(得分:1)
查看本文,了解实现目标的更简便方法:
答案 1 :(得分:0)
这是我在此期间使用的解决方法:
RevitAddinUtility.dll
,另一个RevitAddinUtility64.dll
如果是,则更改文件名称:
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