好的,首先,我發現.NET COM COM dll與VBA交互有很多問題。
首先,用.net通過屬性配置它們,以便它們在註冊表中正確配置很重要。確保Dll項目已被標記爲註冊COM互操作。其次,如果您使用MSI項目,請確保該軟件已標記爲「安裝所有用戶」。 MSI項目在刪除註冊表項方面做得非常差,所以如果你把MSI安裝,.net版本等搞糟了,你的服務器最終會出現「壞的註冊表項」。我最終使用regasm.exe正確註冊組件。我最終轉向了WIX項目安裝。
第三,您需要確保註冊表項是終端服務器的「機器/全局」範圍,因爲每個用戶都將運行一組潛在的「註冊表」項。如果您已經正確設置了名稱空間,那麼您應該能夠在VBA中進行早期綁定,而不是風險較大的後期綁定「CreateObject」調用。只要確保VBA在啓動過程中檢查「斷開的引用」。第四,我使用非常乾淨的虛擬機來測試我的安裝和註冊表項,在MS Office VBA引用的幫助下,確認COM部件已經正確註冊,所以「CreateObject」調用不會失敗。第五,小心終端服務器和辦公室的顯式版本(特別是Office 2010 x64)的x86/x64問題。如果服務器是x64,則可能必須顯式使用編譯器flags/86(任何CPU對於VBA .net COM對象都可能非常糟糕)。
第六,小心你從.net到COM引發異常的方式。查看System.Runtime.InteropServices.COMException以獲取正確的方法。
From cmd
c:
cd C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727{or the edition your using}
COPY "\\Distribution Share\{YourCompany}\{Software}\{Edition}\{.net Com DLL name}.dll" "C:\Program Files\{YourCompany}\{Software}\{.net Com DLL name}.dll"
Regasm.exe "C:\Program Files\{YourCompany}\{Software}\{.net Com DLL name}.dll" /u
Regasm.exe "C:\Program Files\{YourCompany}\{Software}\{.net Com DLL name}.dll" /regfile:"C:\Program Files\{YourCompany}\{Software}\{.net Com DLL name}.reg" /codebase
cd C:\WINDOWS\System32\
Regedit.exe /s "C:\Program Files\{YourCompany}\{Software}\{.net Com DLL name}.reg"
然後我仔細看看生成的註冊表文件,以確保它們位於正確的註冊表配置單元中。
「......導致失敗」,「......失敗」。你能提供更多的細節嗎? – Joe
更新了問題 – AlexVhr
也許運行fuslogvw會有所幫助。 – Joe