我编写了一个C#.NET Com可调用包装器DLL。我使用StrongName对其进行了签名,并使用64位regasm.exe注册了codebase和typelib。使用64位OleViewer可以看到注册和所有控件的方法。但是,当我尝试使用64位\ Windows \ System32 \ cscript.exe:
中的控件时 Set logger = CreateObject("MyCompany.LoggerControl")
这会产生错误:
Microsoft VBScript运行时错误:ActiveX组件无法创建对象:'MyCompany.LoggerControl'
使用Sysutils的ProcMon跟踪此情况,我发现:
1:41:44.8295486 PM cscript.exe 24028 RegOpenKey HKCR \ MyCompany.LoggerControl
名称未找到所需访问权限:阅读
但是,此密钥存在于Regedit中。调用进程从提升的命令提示符运行。如果这是一个安全问题,错误不应该是“拒绝访问”而不是“NAME NOT FOUND”吗?
有哪些其他工具可以跟踪此类COM控件注册错误?
答案 0 :(得分:1)
以下是一些故障排除方法:
确定尝试创建对象时返回的确切错误号:
On Error Resume Next
设置logger = CreateObject(“MyCompany.LoggerControl”)
如果是Err然后
WScript.Echo“错误#”&的Err.Number
WScript.Echo Err.Description
WScript.Quit 1
结束如果
查找此错误代码。例如,它是“访问被拒绝”还是其他一些错误?
创建一个C#可执行文件来调用您的对象,看它是否可以成功创建它。
确保您的DLL没有任何其他依赖项,以防止它被加载到脚本运行的目录中。您可以使用您运行脚本的目录中的depends.exe,或者您可以使用我最喜欢的穷人的regsvr32技术来尝试加载DLL。如果DLL由于依赖项而无法加载,您将收到一个错误对话框,告诉您它无法找到另一个DLL或加载其中一个依赖项。如果它可以加载DLL确定它会说它已成功注册它。
C:\ PathToVbs> regsvr32 C:\ PathToYourDLL \ YourDLL.dll