[英].Net COM Dll in Classic ASP on 64 bit: 800a01ad ActiveX component can't create object
[英].NET COM+ Object can't be used from ASP Classic
TL; DR :為什么會成功從.NET激活COM +組件,但無法從ASP加載?
我的情況:
我已經使用C#/。NET(框架4.0)創建了COM +對象。
我正在使用Visual Studio Installer項目將其部署到服務器,該項目既將DLL安裝到GAC,又將其注冊到COM。
瀏覽C:\\Windows\\Microsoft.NET\\assembly\\GAC_MSIL
,我可以成功找到已注冊的DLL。
查看Component Services加載項,我可以創建一個應用程序並添加我已注冊的組件。 請注意,名稱是不同的(在DLL /命名空間和ProgId之間),這確實使我確信這兩種情況均正確發生。
但是 ,我試圖從ASP Classic創建此COM的新實例。 這意味着程序中只有一行調用了CreateObject("PROGID")
。
我已經做了以下工作:
CreateObject("PROGID")
創建了一個VBS文件,並對其進行了調用。 它也會失敗,因此問題不僅限於ASP。 New-Object -ComObject "PROGID"
,它也失敗了。 Type.GetTypeFromProgID
和Activator.CreateInstance
。 我成功調用了該實例。 該錯誤似乎很常見,為80070002。這表明COM無法找到程序集文件。 檢查注冊表后,我可以看到COM記錄的程序集名稱(FQ程序集名稱)確實與我安裝的程序集相對應。 運行時是新的CLR(v4.0.30319),並且類名也正確。
.NET可以實例化COM對象而沒有任何問題,而VB6 / ASP正在中止,這一事實使我感到完全困惑 。
更糟糕的是,DLL已於上周成功部署,而我正在安裝新版本,因此我應該會遇到麻煩。
在ASP和.NET之間加載COM的方式有什么不同,可以導致這種情況? 我在想什么:
最后一項應該是正確的,因為我剛剛在上周成功完成了此操作,並且我沒有更改運行時的任何內容。
看來這似乎不是一個難以捉摸的問題。 我仍然會在這里記錄它,因為有些人可能會在完全相同的情況下遇到這個問題,盡管這不太可能。
ASP,VBScript和PowerShell無法看到我應用的更改,並且由於某種原因找不到組件(80070002)的原因是,必須進行IIS重置或服務器的完整關閉/重新啟動周期 。
是什么使我這個方案既服務器管理員忘記執行重置的事實-這是我沒有考慮-而事實上,.NET 能獲得COM實例。
我不知道能解釋這種情況的細節-也許.NET尚未掩蓋該程序集,而運行COM的任何程序(是的,我也不知道,對不起)確實做到了。 當然,正在發生某種影響。
重新啟動服務器即可完全解決問題。
最后一點-僅關閉Component Services
上的應用程序還不夠。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.