2010-08-24 69 views
0

我无法通过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\system32C:\WINDOWS\SysWOW64中。

有什么办法,从32位cmd.exe批处理脚本内java.exe产卵并运行,运行的makecab.exe的64位版本(不是复制从C:\WINDOWS\system32C:\WINDOWS\SysWOW64物理可执行文件等)?

谢谢

+0

“Execute Windows Batch Shell”中的命令是什么(如果使用的话)? – Sagar 2010-08-24 15:42:28

+0

C:\ WINDOWS \ system32 \ makecab.exe/F“D:\ Build \ 2.3.278.40859.cab.df” – 2010-08-24 15:47:23

回答

1

这个对我来说现在很明显。哈德森被配置为运行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 
+1

我为Active Directory插件bug创建了一个JIRA:http://issues.hudson- ci.org/browse/HUDSON-7286 – 2010-08-24 21:42:37

0

看起来您正在指定makecab的路径。我的建议是不这样做。当cmd.exe启动时,Makecab已经在默认路径中,并且通过指定路径来强制它被使用。如果你直接调用makecab.exe,cmd.exe会立即选择。

AFAIK,您无法从32位版本的cmd运行64位makecab。它不会运行。

看来makecab正在抱怨指令文件。你能发布你的指令文件的内容吗?

而且,我相信指令文件的扩展名应该是.DDF,不名.df(虽然我不知道有多少不同它使)。

+0

用途:** 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

1

使用64位JVM应该解决您的问题根源。

要使用Hudson修复Active Directory问题,需要在64位JVM上使用Active Directory插件时指定域名(高级配置)。

由于使用Win64时出现com4j问题,64位窗口上的Active Directory插件uses the unix implementation

相关问题