那么,我会被诅咒的。在我的电脑上,我拥有宝贵的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