Windows Server 2003 64 бит cmd.exe ошибка - PullRequest
0 голосов
/ 24 августа 2010

У меня проблемы с вызовом утилиты Microsoft Cabinet Maker (makecab) из пакетного скрипта на сервере Windows Server 2003. Пакетный сценарий выполняется Hudson (службой непрерывной интеграции), установленной на компьютере в качестве службы Windows.

Процесс 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, все будет работать отлично. Но я заметил, что запуск cmd.exe из Пуск> Выполнить порождает 64-битный процесс, который затем запускает 64-битный процесс makecab.

Может кто-нибудь объяснить, почему 32-битный makecab может выдавать ошибку? Исполняемый файл существует как в C:\WINDOWS\system32, так и в C:\WINDOWS\SysWOW64.

Существует ли какой-либо способ, из 32-битного cmd.exe пакетного сценария, который java.exe порождает и запускается, для запуска 64-битной версии makecab.exe (кроме копирования физического исполняемого файла из C:\WINDOWS\system32 в C:\WINDOWS\SysWOW64)

Спасибо

Ответы [ 3 ]

1 голос
/ 24 августа 2010

Это довольно очевидно для меня сейчас.Hudson настроен на запуск 32-разрядной версии Java в 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.

Единственная проблема заключается в том, что плагин 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
1 голос
/ 23 сентября 2010

Использование 64-битной JVM должно исправить вашу проблему с корнем.

Чтобы исправить проблему Active Directory с Hudson, вам нужно указать имя домена (расширенная конфигурация) при использовании подключаемого модуля Active Directory на 64-битовые JVM.

Из-за проблемы com4j с Win64 плагин Active Directory использует реализацию unix в 64-битных окнах.

0 голосов
/ 24 августа 2010

Похоже, вы указываете путь к makecab.Мое предложение было бы не делать этого.Makecab уже находится в пути по умолчанию при запуске cmd.exe, и, указав путь к нему, вы заставляете его использовать.Если вы просто вызовите makecab.exe напрямую, cmd.exe выберет прямо сейчас.

AFAIK, вы не сможете запустить 64-битный makecab из 32-битной версии cmd.Это не будет работать.

Кажется, makecab жалуется на файл директив.Можете ли вы опубликовать содержимое вашего файла директив?

Кроме того, я считаю, что расширение файла директив должно быть .ddf , а не .df (хотя я не уверен, насколько оно отличаетсяделает).

...