与经典ASP有奇怪的COM问题

时间:2016-08-07 10:08:28

标签: asp-classic com

我有一个COM组件,我想在Classic ASP中使用它。使用regasm开关,使用64位和32位版本/codebase正确注册。

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

如果我创建一个试图创建COM组件的VBScript文件,当我使用64位和32位版本的cscript.exe运行它时,它会成功而没有问题。

但是,当我尝试在完全相同的COM组件上执行Server.CreateObject时,我收到以下错误:

  

服务器对象错误' ASP 0177:80070002'

     

Server.CreateObject失败

     

somefile.asp,第2行

     

80070002

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

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

我在这里遇到的任何线索?我尝试为Everyone提供DLL文件的完全权限,因为我原本认为这是一个IIS问题。但是,这似乎并非如此。

我用Google搜索了好几个小时,看到了无数类似的问题,但这没有关系,因为所提出的解决方案都没有用。

2 个答案:

答案 0 :(得分:2)

如果它与cscript.exe一起正常运行并且在ASP中失败,几乎所有时间都是由安全上下文或文件/注册权限问题引起的。 ASP在IIS用户领域下运行,您需要确保用户ID可以访问COM对象所需的所有资源(包括临时文件/文件夹)。

答案 1 :(得分:1)

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

显然,如果您尝试从网络共享注册DLL,它将提供这些症状,但消息是“已成功注册类型”。

非常可怕。

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