1

我在 C# 中创建了一个 COM 对象,该对象后来被 VBScript 使用。为了使 VBScript 能够实例化对象,它必须被注册。以前,我使用任何 .NET Framework 提供的 RegAsm 工具手动注册对象。

但是,我现在正在创建一个安装程序,这样我就可以在不同的机器上安装这个对象,当我使用 InstallShield 2012 Spring Express 时,它警告我 dll 不是自注册的。

如何让我的 DLL 自注册?我找到了使用 C# 中的 Process 对象来调用 RegAsm 的人的指南和示例,但我的对象不是可执行文件。

4

2 回答 2

6

自定义操作和自我注册不是最佳实践。

如果您的 InstallShield 版本不支持 COM 互操作,请运行以下命令:

regasm foo.dll /regfile:foo.reg

现在将该 reg 文件导入 InstallShield 并将文件 foo.dll 调整为 [INSTALLDIR]foo.dll。

如果您的 InstallShield 版本不支持导入 reg 文件,请在记事本中编辑并手动将值输入 InstallShield。

这是最干净的方法,因为您不会有任何自定义操作失败,并且由于 MSI 正在处理注册,它知道如何卸载和回滚数据。

于 2013-02-28T13:00:45.640 回答
1

如果您正在使用 InstallShield,您可以要求 InstallShield 注册您的类型库。在组件-> 你的 DLL -> .NET 设置-> 将.NET COM 互操作设置为是。

InstallShield 设置截图

如果您使用的 InstallShield 版本不支持此功能,请编写一个自定义操作,调用 RegAsm.exe 来注册您的 dll。

于 2013-02-27T05:55:12.793 回答