经典 ASP 的奇怪 COM 问题

Weird COM issue with classic ASP

我有一个 COM 组件,我想使用来自 Classic ASP 的组件。使用 /codebase 开关使用 regasm 的 64 位和 32 位版本都可以正确注册它。

所有程序集都使用强名称签名(尽管密钥不受密码保护)。当我注册类型时,我得到了它们已成功注册的确认信息。

如果我制作了一个尝试创建 COM 组件的 VBScript 文件,当我 运行 使用 cscript.exe 的 64 位和 32 位版本时,它会毫无问题地成功。

但是,当我尝试对完全相同的 COM 组件执行 Server.CreateObject 时,出现以下错误:

Server object error 'ASP 0177 : 80070002'

Server.CreateObject Failed

somefile.asp, line 2

80070002

excepton 提供的行只包含 Server.CreateObject 语句。

程序集是 AnyCPU,我要公开的类型设置了 [ComVisible(true)] 属性。程序集的其余部分不是 COM 可见的。

关于我在这里遇到的任何线索?我尝试为 DLL 文件授予 Everyone 的完全权限,因为我最初认为这是一个 IIS 问题。然而,事实似乎并非如此。

我已经在谷歌上搜索了很多小时,看到了无数类似的问题,但这并不相关,因为 none 的建议解决方案有效。

如果它在 cscript.exe 中正常工作而在 ASP 中失败,几乎所有的时间都是由于安全上下文或 file/register 权限问题。 ASP 在 IIS 用户领域下运行,您需要确保用户 ID 可以访问您的 COM 对象所需的所有资源(包括临时 file/folder)。

我解决了,但正如我所怀疑的那样,这与其他问题中看到的原因不同。

显然,如果您尝试从网络共享注册 DLL,它会提供这些症状,尽管消息是 "Types registered successfully"。

非常可怕。

将我的所有 DLL 移动到计算机上的本地文件夹时,它们注册并 运行 成功,没有问题。