2013-02-27 32 views
1

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

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

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

回答

5

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

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

regasm foo.dll /regfile:foo.reg

现在导入.reg文件到InstallShield和调整的东西文件foo .dll到[INSTALLDIR] foo.dll。

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

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

1

如果您使用InstallShield,则可以要求InstallShield注册您的typelib。在组件 - >您的DLL - >.NET设置 - >设置.NET COM互操作为是。

InstallShield setting screenshot

如果您使用的是InstallShield版本不支持这个,写一个叫RegAsm.exe注册您的DLL自定义操作。

+0

我的InstallShield版本不支持上面的内容。自定义操作的外观如何?我有我的DLL安装在一个静态位置,用户不能改变它,这意味着我需要的只是知道如何调用自定义操作中的regasm。我如何找到regasm的路径等? – Tada 2013-02-27 06:04:53

+0

@Tada看看这篇文章是否有帮助。 http://shieldmaster.wordpress.com/2010/07/26/primer-on-creating-installscript-custom-actions/创建自定义操作需要InstallShield的一些知识。 – 2013-02-27 06:54:15

+0

@Tada按照本文,http://kb.flexerasoftware.com/doc/Helpnet/isxhelp12/IDlgFilePropertiesComNetSettings.htm InstallShield Express也支持.NET注册。所以你的版本没有理由不支持它。 – 2013-02-27 06:56:11