2012-08-14 179 views
1

我使用Inno Setup创建我的设置。所有的工作都很好,但是我遇到了这个问题:如何注册.NET DLL以使其可以被COM +访问。因为我们都知道.NET为此带来RegSvcs.exe,所以我查看了Inno安装文档,只发现了用于Assembly注册的gacinstall,但没有用于COM +交互。 所以我在[Run]部分Com + Intero注册Inno Setup

; register .Net components for com+ 
Filename: {win}\Microsoft.NET\Framework\v4.0.30319\RegSvcs.exe; Parameters: "{app}\bin\Common.dll"; Description: Component registration; WorkingDir: {app}\bin; StatusMsg: Component registration...; Flags: waituntilterminated 

但是通过测试此行只是跳过设置添加此。 DLL在[Files]部分之前被复制到目标并且可用。 设置后,我可以手动运行RegSvcs.exe从命令行以及没有问题。

+1

只是一个提示(不是解决您的问题),您可以在文件路径中使用'{dotnet40}'常量来获取.NET 4.0路径,具体取决于安装程序运行的模式(32位或64位),或者使用'{dotnet4032}'获得32位.NET 4.0路径或'{dotnet4064}'用于64位。它消除了你的路径硬编码。 – TLama 2012-08-14 08:50:54

+0

但是你所描述的很奇怪,从第一次看它看不出什么错误(也许我会删除'WorkingDir',但它应该不是我想的问题)。无论如何,你使用的Windows版本是Vista吗?如果是这样,你运行你的设置提升为管理员? – TLama 2012-08-14 09:19:18

+0

目标平台通常是赢得2008 R2系统。安装程序始终以管理员权限运行。 – YvesR 2012-08-14 09:24:19

回答

1

Inno安装程序是否按预期工作!

问题在我的情况是: RegSvcs.exe安装具有错误凭据的组件。 它安装COM +安全interactive user但我从服务调用它没有用户,所以我需要SYSTEM作为凭据。

解决方案: 编写一小段代码,用于在注册后修改安全凭证。我没有找到任何选项标志直接告诉regsvcs.exe它。 在这里找到一篇文章http://www.carlosag.net/articles/configure-com-plus如何做到这一点,现在将适应从那里的想法写一个小程序来完成这项工作。

+0

+1,也许你可能会提到检查正确的注册表项,以验证通过'RegSvcs.exe'注册成功。 – TLama 2012-08-27 08:18:55

+0

那么,COM +修改需要通过CLSID找到正确的应用程序来初始化。所以如果失败了,组件之前没有正确注册。但你给了我一个主意。然后我的一段代码可以尝试注册(我知道文件的路径已经看到了),然后再次重做...... – YvesR 2012-08-27 08:31:47

+0

啊,现在我完全明白了。由于您的应用程序的安全设置,注册失败。很高兴知道! – TLama 2012-08-27 08:48:27