代码之家  ›  专栏  ›  技术社区  ›  Tom Hunter

Windows Server 2003 64位命令行错误

  •  0
  • Tom Hunter  · 技术社区  · 15 年前

    从WindowsServer2003服务器上的批处理脚本调用MicrosoftCabinetMaker实用程序(makecab)时遇到问题。批处理脚本由作为windows服务安装在计算机上的Hudson(持续集成服务)运行。

    这个 hudson.exe 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: 
    

    有人能解释为什么32位makecab会抛出错误吗?可执行文件同时存在于 C:\WINDOWS\system32 C:\WINDOWS\SysWOW64 .

    有没有办法,从32位 命令提示符 批处理脚本 java.exe文件 生成并运行,以运行64位版本的 makecab.exe文件 (除了从 )?

    谢谢

    3 回复  |  直到 15 年前
        1
  •  1
  •   Tom Hunter    15 年前

    我现在很清楚这一点了。Hudson被配置为运行32位版本的Java哈德逊.xml:

    <executable>C:\Program Files (x86)\Java\jre6\bin\java</executable>
    

    32位Java可执行文件正在生成一个32位命令提示符.

    我所需要做的就是使用64位版本的Java(可从以下网址获得: https://cds.sun.com/is-bin/INTERSHOP.enfinity/WFS/CDS-CDS_Developer-Site/en_US/-/USD/ViewFilteredProducts-SingleVariationTypeFilter )并指向hudson.xml.

    唯一的问题是Hudson 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
    
        2
  •  1
  •   Jason    15 年前

    使用64位JVM应该可以解决根本问题。

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

    uses the unix implementation

        3
  •  0
  •   Sagar    15 年前

    看起来您正在指定makecab的路径。我的建议是不要那样做。Makecab已在默认路径中命令行启动时,通过指定指向它的路径,可以强制使用它。如果你打电话来makecab.exe文件直接,命令行我会选择现在。

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

    似乎makecab在抱怨指令文件。你能把指令文件的内容贴出来吗?

    另外,我认为指令文件的扩展名应该是 .ddf文件 ,不是 .df型