我们目前正在基于提供给我们的.net 4.0开发外部实用程序。
主程序(外部实用程序的启动位置)位于虚拟服务器上。因此,每个用户都可以通过进入网络文件夹并启动.exe来启动程序。
在主程序中,有一个选项可以启动外部实用程序,这些实用程序也是从网络路径启动的。
外部实用程序通过api dll连接到主程序。如果我没有弄错,dll是activex组件。
所有开发人员都有一个本地安装的主程序。在.Net中创建引用需要这样做。如果安装不可用,则无法绑定引用。对于开发人员来说,该工具可以工作。
但是对于没有完整安装的最终用户来说,这个工具不能工作,因为它会在注册表中查找一些值。这些在终端用户站是不可用的。
最终用户在尝试启动时会收到此警告。
无法将'System.__ComObject‘类型的COM对象转换为接口类型'MegaMapp.MegaCurrentEnv’。此操作失败,因为对IID '{33D6C7C0-7D1B-450E-B8A4-8A8611D5B40F}‘接口的COM组件的QueryInterface调用失败:不支持此类接口( HRESULT: 0x80004002 (E_NOINTERFACE)除外)
{33D6C7C0-7D1B-450E-B8A4-8A8611D5B40F}是最终用户无法使用的注册表项。
有没有办法告诉工具,它们应该从exe所在的服务器加载注册表项,而不是从它们的本地注册表加载注册表项?
发布于 2012-02-16 11:16:20
ActiveX组件将始终需要客户端计算机上的注册表设置。
在使用DLL之前,可以在应用程序启动期间使用regsvr32注册DLL。我不确定是否需要管理员权限。
我不会尝试在这样的环境中使用ActiveX。
是我们与软件进行通信的唯一途径。所以我们用api调用构建了.net程序。
构建一个使用ActiveX组件的服务器(例如WCF服务主机),并从每个客户端与该服务器进行对话。
发布于 2012-02-16 11:17:22
如果外部实用程序是ActiveX EXE,那么可以使用标准的regsvr32实用程序在最终用户的机器上注册它。它只需要做第一次。
https://stackoverflow.com/questions/9310229
复制相似问题