从共享文件夹运行程序的问题

时间:2012-02-16 11:09:31

标签: c# .net dll registry

我们目前正在根据提供给我们的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所在的服务器而不是从本地注册表加载注册表项的工具?

2 个答案:

答案 0 :(得分:1)

ActiveX组件将始终需要客户端计算机上的注册表设置。

您可以在应用程序启动期间使用regsvr32在您使用它之前注册DLL。我不确定是否需要管理员权限。

我不会尝试在这样的环境中使用ActiveX。

  

activex dll是我们与软件通信的唯一方式。所以我们用api调用构建了.net程序。

构建一个服务器(例如WCF服务主机),它使用ActiveX组件并与每个客户端的服务器通信。

答案 1 :(得分:0)

如果外部实用程序是ActiveX EXE,则可以使用标准regsvr32实用程序在最终用户的计算机上注册它。它只需要第一次完成。