Windows Server 2003 64位cmd.exe错误
我无法通过Windows Server 2003服务器上的批处理脚本调用Microsoft Cabinet Maker实用程序(makecab)。批处理脚本由作为Windows服务安装在机器上的Hudson(持续集成服务)运行。Windows Server 2003 64位cmd.exe错误
的hudson.exe
(64位)过程产生一个java.exe
(32位)的过程,产生一个cmd.exe
(32位)的过程,产生一个makecab.exe
(32位)的过程。 Makecab然后产生一个错误:
D:\Hudson\jobs\Testing\workspace>C:\WINDOWS\system32\makecab.exe /F "D:\Build\2.3.278.40859.cab.df"
Microsoft (R) Cabinet Maker - Version 5.2.3790.0
Copyright (c) Microsoft Corporation. All rights reserved..
Parsing directives
Parsing directives (D:\Build\2.3.278.40859.cab.df: 1 lines)
D:\Build\2.3.278.40859.cab.df(12): ERROR:
但是,如果我打开一个远程桌面连接到服务器,并打开命令提示符窗口,然后运行makecab它完美的作品。但我注意到从Start> Run运行cmd.exe会生成一个64位进程,然后运行64位makecab进程。
任何人都可以解释为什么32位makecab可能会抛出一个错误?可执行文件存在于C:\WINDOWS\system32
和C:\WINDOWS\SysWOW64
中。
有什么办法,从32位cmd.exe
批处理脚本内java.exe
产卵并运行,运行的makecab.exe
的64位版本(不是复制从C:\WINDOWS\system32
到C:\WINDOWS\SysWOW64
物理可执行文件等)?
谢谢
这个对我来说现在很明显。哈德森被配置为运行Java的32位版本,在hudson.xml:
<executable>C:\Program Files (x86)\Java\jre6\bin\java</executable>
的32位Java可执行产卵32位的cmd.exe。
我需要做的就是使用64位版本的Java(可在此获得:https://cds.sun.com/is-bin/INTERSHOP.enfinity/WFS/CDS-CDS_Developer-Site/en_US/-/USD/ViewFilteredProducts-SingleVariationTypeFilter)并指向它在hudson.xml中。
唯一的问题是,它看起来像哈德森的Active Directory插件不与64位Java工作..
24-Aug-2010 19:39:52 hudson.WebAppMain$2 run
SEVERE: Failed to initialize Hudson
org.jvnet.hudson.reactor.ReactorException: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'activeDirectory': Instantiation of bean failed; nested exception is org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [hudson.plugins.active_directory.ActiveDirectoryUnixAuthenticationProvider]: Constructor threw exception; nested exception is java.lang.NullPointerException
at org.jvnet.hudson.reactor.Reactor.execute(Reactor.java:246)
at hudson.model.Hudson.executeReactor(Hudson.java:689)
at hudson.model.Hudson.<init>(Hudson.java:606)
at hudson.model.Hudson.<init>(Hudson.java:546)
at hudson.WebAppMain$2.run(WebAppMain.java:222)
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'activeDirectory': Instantiation of bean failed; nested exception is org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [hudson.plugins.active_directory.ActiveDirectoryUnixAuthenticationProvider]: Constructor threw exception; nested exception is java.lang.NullPointerException
at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:231)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:957)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:869)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:514)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory$1.run(AbstractAutowireCapableBeanFactory.java:485)
at java.security.AccessController.doPrivileged(Native Method)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:455)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:251)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:169)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:248)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:170)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:413)
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:735)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:369)
at hudson.util.spring.DefaultRuntimeSpringConfiguration.getApplicationContext(DefaultRuntimeSpringConfiguration.java:94)
at hudson.util.spring.BeanBuilder.createApplicationContext(BeanBuilder.java:388)
at hudson.plugins.active_directory.ActiveDirectorySecurityRealm.createSecurityComponents(ActiveDirectorySecurityRealm.java:62)
at hudson.security.SecurityRealm.getSecurityComponents(SecurityRealm.java:359)
at hudson.security.HudsonFilter.reset(HudsonFilter.java:134)
at hudson.model.Hudson.setSecurityRealm(Hudson.java:1767)
at hudson.model.Hudson$13.run(Hudson.java:2165)
at org.jvnet.hudson.reactor.TaskGraphBuilder$TaskImpl.run(TaskGraphBuilder.java:146)
at org.jvnet.hudson.reactor.Reactor.runTask(Reactor.java:259)
at hudson.model.Hudson$3.runTask(Hudson.java:671)
at org.jvnet.hudson.reactor.Reactor$2.run(Reactor.java:187)
at org.jvnet.hudson.reactor.Reactor$Node.run(Reactor.java:94)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Caused by: org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [hudson.plugins.active_directory.ActiveDirectoryUnixAuthenticationProvider]: Constructor threw exception; nested exception is java.lang.NullPointerException
at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:98)
at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:87)
at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:225)
... 28 more
Caused by: java.lang.NullPointerException
at hudson.plugins.active_directory.ActiveDirectoryUnixAuthenticationProvider.<init>(ActiveDirectoryUnixAuthenticationProvider.java:52)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
at java.lang.reflect.Constructor.newInstance(Unknown Source)
at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:83)
... 30 more
我为Active Directory插件bug创建了一个JIRA:http://issues.hudson- ci.org/browse/HUDSON-7286 – 2010-08-24 21:42:37
看起来您正在指定makecab的路径。我的建议是不这样做。当cmd.exe启动时,Makecab已经在默认路径中,并且通过指定路径来强制它被使用。如果你直接调用makecab.exe,cmd.exe会立即选择。
AFAIK,您无法从32位版本的cmd运行64位makecab。它不会运行。
看来makecab正在抱怨指令文件。你能发布你的指令文件的内容吗?
而且,我相信指令文件的扩展名应该是.DDF,不名.df(虽然我不知道有多少不同它使)。
用途:** makecab.exe/F“D:\ Build \ 2.3.278.40859.cab.df “**不是C:\ WINDOWS \ system32 \ makecab.exe/F”D:\ Build \ 2.3.278.40859.cab.df“ – Sagar 2010-08-24 16:10:48
使用64位JVM应该解决您的问题根源。
要使用Hudson修复Active Directory问题,需要在64位JVM上使用Active Directory插件时指定域名(高级配置)。
由于使用Win64时出现com4j问题,64位窗口上的Active Directory插件uses the unix implementation。
“Execute Windows Batch Shell”中的命令是什么(如果使用的话)? – Sagar 2010-08-24 15:42:28
C:\ WINDOWS \ system32 \ makecab.exe/F“D:\ Build \ 2.3.278.40859.cab.df” – 2010-08-24 15:47:23