2009-06-05 111 views
1

我在C#中編寫了一個程序集,我需要從VB6.0應用程序調用DLL上的方法。 我使DLL COM兼容,並相應地註冊了DLL。在我的VB應用程序中,我將使用VB6.0 CreateObject方法實例化.NET程序集中的類。VB6中的VB6 .NET互操作問題

Set dotNetObj = CreateObject("Namespace.ClassName") 

然後我就可以調用該類的任何方法。

問題:

所有工作正常,直到我嘗試了Vista的機器上執行代碼。每當我執行exe文件,它工作正常,但無論何時使用「以管理員身份運行」選項執行的exe出現以下錯誤:「ActiveX組件不能老是創建 對象」

我需要這個EXE以管理模式運行,否則遺留系統的某些區域將無法工作。

關於爲什麼CreateObject無法在管理模式下工作的任何想法?

+0

我只需要切換InstallAllUsers屬性設置爲TRUE在我的包和部署軟件。 – MegaByte 2009-06-05 11:58:05

回答

1

聽起來像是COM組件只註冊了用戶--所以當管理員試用它時,clsid是未知的。嘗試運行管理員的分析/註冊流程。

(不遠景放的CLSID在HKCU?或者只是HKLM?)

快速搜索似乎表明,它涉及到UAC是否啓用或禁用...它使它看起來HKCU ...殘疾人,它看起來在HKLM。因此,如果您正在安裝到HKCU,那麼對於禁用UAC的管理員,它將不會在那裏。

+1

我只需要在我的包和部署軟件中將InstallAllUsers屬性切換爲TRUE。 – MegaByte 2009-06-05 11:58:02

0

因爲它只在用戶空間註冊?

嘗試註冊你的DLL在管理員外殼

regasm mycomponent.dll /register /codebase /tlb

+0

對於一個.NET DLL,它更可能是regasm或類似的... – 2009-06-05 09:39:47