那麼,我會被詛咒的。在我的電腦上,我擁有寶貴的DLL,位於「C:\ myDLL.DLL」,它可以從VisualStudio2013完美地工作。只要我頑固地堅持把我的DLL放在同一位置(爲什麼不呢?)在我的測試Win2k8 64位服務器框中運行IIS7,當我的C#試圖在Internet Explorer中嘗試調用我的DLL函數時,什麼都沒有發生(或Firefox或Chrome)。沒有,nada,zilch,rien du tout :(
在user2731610的建議下,我使用ProcessMonitor檢查我的DLL是否被ASP進程worker訪問,ProcessMonitor顯示找到了DLL並且正確「創建」,「打開」和「查詢內部」,但沒有發生過這一點?
我在我的DLL上使用了DependencyWalker,發現在myDLL.dll中引用了NT.dll和Kernel32.dll。我推斷,也許,myDLL.dll需要位於相同的位置作爲那些其他兩個DLL?所以我把myDLL移到了C:\ Windows \ System32,還有C:\ Windows \ SysWOW64。爲什麼不呢?我決定把一個副本在這兩個地方,以防萬一。因爲我記得,當我運行ProcessMo時nitor早些時候ASP系統地查詢了多個位置來搜索我的DLL?可能包含在PATH聲明中的所有位置?難道它複雜...
DependencyWalker在我的DLL中顯示3個條目。首先,Kernel32.DLL,CPU = x64。其次,NTDLL.DLL,CPU = x64。第三,myDLL,CPU = x86。不同的CPU「類型」被DependencyWalker標記爲「具有不同CPU類型的模塊」的錯誤?我相信myDLL編譯爲32位,而Kernel32和NTDLL編譯爲64位。儘管如此,這似乎並不重要。
在安全性下,我添加了IIS_IUSRS用戶並完全控制它。這種設置可能沒有什麼區別,但在嘗試診斷問題的過程中,這可能是一個候選人。
最後,我想說,我在這個問題上花費了太多的時間,並且我廣泛地搜索網絡尋求幫助。我對所遇到的所有文章和帖子感到沮喪,沒有真正清楚發生了什麼。我猜COM被認爲是老技術,新的資源將被管理的解決方案。
這是一個漫長而令人沮喪的研究的結尾。我看不到隧道盡頭的燈光,並且即將詛咒微軟。感謝您的幫助和耐心。
感謝您的幫助。我仍然處於黑暗中。我不知道行爲的來源是什麼。我讀過關於冒充的事,但我不確定這是否是問題。用戶上下文?直到我可以跟蹤執行到調用我的外部DLL函數爲止,我都不知道。否則,我不知道我在找什麼。 – 2014-08-30 15:37:42