正如汉斯所说,我需要使用 64 位版本的 Regasm.exe。即使我已经尝试在安装后手动启动 RegAsm,它也无法正常工作。首先,我在项目的构建后事件中添加了这一点:
"C:\Windows\Microsoft.NET\Framework64\v4.0.30319\regasm.exe" "$(TargetPath)"
这对调试版本起到了作用。奇怪的是,AnyCPU 版本起初在我的 x64 应用程序上运行良好,在调试模式下,当我创建我的安装项目时它开始崩溃(不知道为什么......)。但是这个更改并没有解决我在安装应用程序时的问题,所以我在我的自定义操作的“提交”中添加了这个(基于这篇文章:Regasm- 64bit or 32bit through windows installer in visual studio):
Public Overrides Sub Commit(savedState As System.Collections.IDictionary)
MyBase.Commit(savedState)
'Check if we're on a x64 OS
If Environment.Is64BitOperatingSystem Then
'Get the Windows dir on the current computer
Dim winDir As String = New IO.DirectoryInfo(Environment.SystemDirectory).Parent.FullName
'Define the path to regasm for x64 machines
Dim regasmPath As String = IO.Path.Combine(winDir, "Microsoft.NET", "Framework64", System.Runtime.InteropServices.RuntimeEnvironment.GetSystemVersion, "RegAsm.exe")
If File.Exists(regasmPath) Then 'Si le chemin existe, on enregistre la DLL
'Get the location of our DLL
Dim componentPath As String = GetType(Installer).Assembly.Location
'Executes regasm
System.Diagnostics.Process.Start(regasmPath, "/codebase """ & componentPath & """")
End If
End If
End Sub
我从原始文章中更改的是 RegAsm 的路径。由于我的设置是 x86,RuntimeEnvironnment 的目录指向“Microsoft.NET\Framework...”路径而不是“Framework64”,这违背了我的操作目的(它已经注册为 32 位 COM 互操作),所以我尝试获取 RegAsm 的 x64 版本并运行它。