经典 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 移动到计算机上的本地文件夹时,它们注册并 运行 成功,没有问题。
我有一个 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 移动到计算机上的本地文件夹时,它们注册并 运行 成功,没有问题。