我们目前正在根据提供给我们的API使用.net 4.0开发外部实用程序。
启动外部实用程序的主程序位于虚拟服务器上。因此,每个用户都可以通过转到网络文件夹并启动.exe。
来启动程序在主程序中,有一个选项可以启动外部实用程序,这些实用程序也是从网络路径启动的。
外部实用程序通过api dll连接到主程序。如果我没有弄错的话,那么dll就是一个activex组件。
所有开发人员都有本地安装的主程序。这是在.Net中创建引用所必需的。如果安装不可用,则无法绑定引用。 对于开发人员来说,该工具可以正常工作。
但对于没有完全安装的最终用户来说,该工具无法运行,因为它会进入注册表并查找某些值。这些在最终用户站无法使用。
最终用户在尝试启动时会收到此警告
无法转换类型为' System .__ ComObject'的COM对象。接口类型' MegaMapp.MegaCurrentEnv'。此操作失败,因为QueryInterface调用COM组件上的接口与IID' {33D6C7C0-7D1B-450E-B8A4-8A8611D5B40F}'由于以下错误而失败:不支持此类接口(HRESULT异常:0x80004002(E_NOINTERFACE))
{33D6C7C0-7D1B-450E-B8A4-8A8611D5B40F}是最终用户无法使用的注册表项。
有没有办法告诉他们应该从exe所在的服务器而不是从本地注册表加载注册表项的工具?
答案 0 :(得分:1)
ActiveX组件将始终需要客户端计算机上的注册表设置。
您可以在应用程序启动期间使用regsvr32在您使用它之前注册DLL。我不确定是否需要管理员权限。
我不会尝试在这样的环境中使用ActiveX。
activex dll是我们与软件通信的唯一方式。所以我们用api调用构建了.net程序。
构建一个服务器(例如WCF服务主机),它使用ActiveX组件并与每个客户端的服务器通信。
答案 1 :(得分:0)
如果外部实用程序是ActiveX EXE,则可以使用标准regsvr32实用程序在最终用户的计算机上注册它。它只需要第一次完成。