我有一个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搜索了好几个小时,看到了无数类似的问题,但这没有关系,因为所提出的解决方案都没有用。
答案 0 :(得分:2)
如果它与cscript.exe一起正常运行并且在ASP中失败,几乎所有时间都是由安全上下文或文件/注册权限问题引起的。 ASP在IIS用户领域下运行,您需要确保用户ID可以访问COM对象所需的所有资源(包括临时文件/文件夹)。
答案 1 :(得分:1)
我解决了它,但正如我所怀疑的那样,这与其他问题中的原因并不相同。
显然,如果您尝试从网络共享注册DLL,它将提供这些症状,但消息是“已成功注册类型”。
非常可怕。
将所有DLL移动到计算机上的本地文件夹时,他们已成功注册并成功运行。