2010-02-11 88 views
3

我试图获得一个Windows脚本组件在x64开发机器上工作。在x32位上工作良好。但似乎无法让它运行,我对JScript和VBScript都有同样的问题。在Windows 7上创建简单的“Windows脚本组件”问题

这是最简单的wsc组件。它所做的只是在消息框中弹出“Hello”。如果将下面的snippit保存到名为test_lib.wsc的文件中,则可以右键单击并注册它。它现在可用作COM组件。

<?xml version="1.0"?> 
<component> 
<?component error="true" debug="true"?> 
<registration 
    description="Test Script Library" 
    progid="TestScript.Lib" 
    version="1.00" 
    classid="{314042ea-1c42-4865-956f-08d56d1f00a8}" 
> 
</registration> 
<public> 
    <method name="Hello"> 
    </method> 
</public> 
<script language="VBScript"> 
<![CDATA[ 
Option Explicit 
Function Hello() 
    MsgBox("Hello.") 
End Function 
]]> 
</script> 
</component> 

接下来,创建下面的示例VB脚本,并将其保存到一个文件名为test.vbs

dim o 
set o = createobject("TestScript.Lib") 
o.hello() 

当我运行cscript的或WScript的我总是得到以下的test.vbs。 (3,1)Microsoft VBScript运行时错误:ActiveX组件无法创建对象:'TestScript.Lib'“

这在32位XP上运行得非常好。 任何人都有什么想法可能是错的?

非常感谢 Noel。

回答

3

注册从资源管理器的Wndows上下文菜单中WSC,一切都在64位工作得很好,我的Windows 7

我从32位命令提示符下运行的问题,还有我不得不重新注册REGSVR32的WSC从%windir%\sysWOW64,然后从64或32的命令提示符运行时,它运行得很好用的Cscript.exe,两个64位和32位的版本。

你肯定当你注册WSC,您使用的REGSVR32从%windir%\sysWOW64文件夹?

有REGSVR32的两个版本,一个32位(SYSWOW64),一个64位(system32)下他们两个命名REGSVR32。

困惑?加入我们其余的人:)

这里有一个亮点在64位Windows的一些陷阱一个很好的链接:All the same yet very different

+0

当时,使用WOW64文件夹中regsvr32的权威版本解决了问题。 – Bigtoe 2010-02-11 14:34:46

0

您需要确保您使用32位版本的WScript或CScript来运行它。

默认情况下,它将以64位版本运行,并且不能加载32位组件。

的WScript和CScript将的32位版本"%SystemRoot%\SysWOW64\

发现我添加了一个新的注册表项与注册表编辑器: -

HKEY_CLASSES_ROOT\VBSFile\Shell\Open32\Command

,并给它的默认值: -

"%SystemRoot%\SysWOW64\WScript.exe" "%1" %*

这给了我一个VBS f的上下文菜单上Open32进入ILE。

对于CScript将执行你需要确保路径CSript得到SysWow64文件夹中的版本。

+0

我用纯64位注册1日试了一下,因为所有的都是64位。无论如何,我注销组件注册regsvr32,它运行以下“C:\ Windows \ SysWOW64 \ cscript.exe C:\ test.vbs”,仍然有同样的问题。 – Bigtoe 2010-02-11 13:17:31

+0

@Bigtoe:嗯......按照您在Server 2008 x64上发布的方式工作。 – AnthonyWJones 2010-02-11 14:21:43