2013-11-03 78 views
0

我已经为我写的应用程序添加了自动化接口。类型库作为资源存储在应用程序中,启动时,应用程序调用RegisterTypeLib来自动注册类型库。安装期间的注册类型库

我刚刚发现,此调用RegisterTypeLib仅适用于从Visual Studio启动应用程序的开发过程中,因为Visual Studio以管理员身份运行,并且应用程序继承此设置。从命令行运行调试版本时,或者在安装程序安装时运行应用程序时,应用程序未以管理员身份运行,并且对RegisterTypeLib的调用失败。

所以我想我应该在安装过程中注册类型库(这也会使自动化接口可用而不必先运行应用程序)。安装程序是Visual Studio中的Windows Installer项目。

在安装过程中是否可以达到RegisterTypeLib的效果(如果是,如何)?当安装程序解决方案打开时,Visual Studio会显示一个名为“Registry”的编辑器,可以将注册表项添加到注册表中,但是我无法单独添加每个注册表项 - 我需要以某种方式通过一次调用添加整个类型库,像RegisterTypeLib呢。

编辑:manuell的提示和我自己的一些研究之后,这个问题归结为: 我需要调用从安装程序MyApp /RegServer(这也将创造不被RegisterTypeLib创建其他所需的注册表项);人们究竟如何做到这一点?我在Visual Studio安装程序解决方案中添加了“安装”自定义操作,但尚未发现如何触发它。

+1

这是不是很清楚你为什么需要注册它。如果需要,那么您还必须编写额外的注册表项,以超出类型库所需的注册表项,例如HKCR \ {progid},HKCR \ Interface和HKCR \ CLSID。 RegisterTypeLib添加的条目只是一个小增加。使用SysInternal的ProcMon深入了解RegisterTypeLib写入的内容。并考虑在HKCU而不是HKLM中注册所有内容,因此您不需要管理员权限。 RegisterTypeLibForUser现在变得有用。 –

回答

1

通用方法是让安装程序使用命令行参数/ regserver或/ unregserver启动应用程序。如果使用框架(MFC/ATL),则所有注册(注销)步骤的处理都将自动完成。

如果你想自己做所有事情,检查参数为“main”,并调用RegisterTypeLib。如果Windows安装程序知道这是一个com服务器,它应该使用/ regserver启动您的EXE。