2012-02-16 114 views
0

我們目前正在基於提供給我們的API基於.net 4.0開發外部實用程序。從共享文件夾運行程序的問題

啓動外部實用程序的主程序位於虛擬服務器上。因此,每個用戶都可以通過訪問網絡文件夾並啓動.exe來啓動該程序。

在主程序中有一個啓動外部實用程序的選項,這些實用程序也是從網絡路徑啓動的。

外部工具通過api dll連接到主程序。如果我沒有弄錯,dll是一個activex組件。

所有開發者都有本地安裝的主程序。這需要在.Net中創建參考。如果安裝不可用,則不能綁定引用。 對於開發人員來說,該工具起作用。

但是對於沒有完全安裝的最終用戶,該工具不起作用,因爲它進入註冊表並尋找一些值。這些在終端用戶站不可用。

最終用戶試圖啓動

Unable to cast COM object of type 'System.__ComObject' to interface type 'MegaMapp.MegaCurrentEnv'. This operation failed because the QueryInterface call on the COM component for the interface with IID '{33D6C7C0-7D1B-450E-B8A4-8A8611D5B40F}' failed due to the following error: No such interface supported (Exception from HRESULT: 0x80004002 (E_NOINTERFACE))

{33D6C7C0-7D1B-450E-B8A4-8A8611D5B40F}是這是不提供給最終用戶的註冊表項時,得到這樣的警告。

有沒有辦法告訴他們應該從exe文件所在服務器加載注​​冊表項的工具,而不是從本地註冊表中加載註冊表項?

回答

1

ActiveX組件將始終需要客戶端計算機上的註冊表設置。

在應用程序啓動期間,您可以使用regsvr32註冊DLL,然後再使用它。我不確定是否需要管理員權限。

我不會嘗試在這樣的環境中使用ActiveX。

The activex dll is the only way we can communicate with the software. So we built the .net program with the api calls.

構建一個服務器(例如一個WCF服務主機),它使用ActiveX組件並從每個客戶端與該服務器交談。

+0

activex dll是我們可以與軟件進行通信的唯一途徑。所以我們用api調用構建了.net程序。 在客戶機上註冊dll是不可能的,因爲它們在服務器上。 – 2012-02-16 11:29:12

+0

UNC路徑可能工作,您是否嘗試註冊它? – jgauffin 2012-02-16 11:31:04

+0

註冊DLL不能解決這個問題。 – 2012-02-16 11:45:14

0

如果外部工具是ActiveX EXE,那麼您可以使用標準regsvr32實用程序在最終用戶的機器上註冊它。它只需要第一次完成。

+0

外部實用程序是一個.net程序,它使用在註冊exe的服務器上註冊的activex dll。 – 2012-02-16 11:28:26

+0

我同意@jgauffin - 嘗試通過UNC路徑在客戶端計算機上註冊 – 2012-02-16 11:34:55

+0

註冊dll不能解決此問題。 – 2012-02-16 11:48:08