我有一个.NET COM程序集我试图部署到Web服务器(IIS 6 Win 2003)。我们已成功将此程序集部署到我们的测试环境中,但生产环境无法正常工作。
正在从传统的ASP页面调用程序集。每次该页面尝试使用“Set LTMRender = CreateObject("LTMRender.Render")
”初始化程序集时,都会收到错误“Error Type:, (0x80070002)
”。
此错误似乎表示权限被拒绝,或文件未找到类型问题。
我创建了一个测试应用程序,以查看程序集是否在网页外部工作。 .exe初始化程序集,然后进行设计失败的调用,这反过来导致程序集生成日志文件。如果我在与程序集相同的文件夹中运行.exe,但是如果我在其他地方运行它,则会失败。
由于某种原因,无法从文件夹外部访问程序集。
我无法弄清楚为什么这不起作用。我已确认的事情:
任何提示?
修改
我们对我的testapp.exe运行了filemon,它似乎表明了问题所在。当testapp.exe在D:_websites \ DocWebV2 \或D:_websites \ DocWebV2 \ LTMRender \文件夹中运行时,它成功并且filemon显示D:_websites \ DocWebV2 \ LTMRender \ pinPDF.dll SUCCESS
如果我在D:_websites \ DocWebV2 \ Client中运行我的testapp.exe - 我的asp页面运行,它显示D:_websites \ DocWebV2 \ pinPDF.dll NAME NOT FOUND,然后D:_websites \ DocWebV2 \ pinPDF \ pinPDF.dll文件未找到
我不确定为什么它没有查找正确的文件夹,如果它只在这个特定的文件夹下。
答案 0 :(得分:1)
如果找不到文件,则不是权限问题。 7表示Windows错误,2表示ERROR_FILE_NOT_FOUND。 COM可见组件的常见问题是Windows或CLR无法找到依赖DLL。但是这应该生成不同的错误代码。在源代码中查找问题,尝试在不使用文件的完整路径名的情况下打开文件。您的服务器上的工作目录将有所不同。解决此问题的最佳方法是使用调试器。
答案 1 :(得分:1)
发现了这个问题。不完全确定我理解它,但我确实有它工作。特别感谢nobugz让我专注于这条道路。
Filemon显示在我们的测试环境中找到了依赖(托管的.NET).dll但没有生成。
关键是在生产中我们的网络团队选择部署到不同的文件夹然后测试,所以我们有:
<强> PROD 强>
d:_Websites \ DocWebV2 \ LTMRender
的 TEST 强>
d:_Websites \ LTMRender
当我将TEST更改为使用与PROD相同的文件夹结构时,问题是可重现的。
我的程序集是一个COM .dll,因为它已经注册了。依赖的.dll没有注册,所以windows正在检查GAC,然后是PATH文件夹,然后执行进程文件夹而没有找到它。
我总是假设“执行进程文件夹”是.dll文件夹(因为它调用依赖的.dll),但看起来网页就是执行进程。
现在我不明白为什么D:_Websites \ LTMRender被检查。它不在我们的路径中。我假设IIS正在做这件事,因为d:_WebSites是那里所有网页设置的根文件夹。我不是IIS的专家,所以我只是假设它以某种方式控制它。