Назад | Перейти на главную страницу

Setup.exe, вызываемый из командного файла, вылетает с ошибкой 0x0000006

Мы собираемся установить какое-то новое программное обеспечение практически на все наши компьютеры, и я пытаюсь настроить для этого GPO. Мы используем контроллер домена Windows Server 2008 R2, и все наши машины работают под управлением Windows 7.

Объект групповой политики вызывает следующий сценарий, который находится в общей сетевой папке на нашем файловом сервере. Сам сценарий вызывает исполняемый файл, который находится в другом сетевом ресурсе на другом сервере. Исполняемый файл немедленно выйдет из строя с ошибкой 0x0000006. Журнал событий просто говорит следующее: Windows cannot access the file for one of the following reasons: there is a problem with the network connection, the disk that the file is stored on, or the storage drivers installed on this computer; or the disk is missing. Windows closed the program Setup.exe because of this error.

Вот сценарий (который хранится на \\WIN2K8R2-F-01\Remote Applications):

@ECHO OFF

IF DEFINED ProgramFiles(x86) (
    ECHO DEBUG: 64-bit platform

    SET _path="C:\Program Files (x86)\Canam"
) ELSE (
    ECHO DEBUG: 32-bit platform

    SET _path="C:\Program Files\Canam"
)

IF NOT EXIST %_path% (
    ECHO DEBUG: Folder does not exist

    PUSHD \\WIN2K8R2-PSA-01\PSA Data\Client

    START "" "Setup.exe" "/q"

    POPD
) ELSE (
    ECHO DEBUG: Folder exists
)

Запуск сценария вручную от имени администратора также приводит к той же ошибке. Настройка ярлыка с той же целью и параметрами работает отлично. Также работает вызов исполняемого файла вручную.

Не уверен, имеет ли это значение, но установщик основан на dotNETInstaller. Но я не знаю, какая версия.

Буду признателен за любые предложения по исправлению этого. Заранее спасибо!

ОБНОВИТЬ

Я очень сомневаюсь, что это имеет значение, но общий сетевой ресурс, на котором размещен сценарий, является общим диском, а общий сетевой ресурс, ссылки на скрипты для исполняемого файла - это общая папка.

Кроме того, обе акции имеют Domain Computers перечислены с полным доступом к вкладкам общего доступа и безопасности. И PUSHD работает без заключения пути в кавычки.

ОБНОВЛЕНИЕ 2

Если я вручную открою CMD на клиентском компьютере и введу PUSHD "\\WIN2K8R2-PSA-01\PSA Data\Client" Я правильно смонтировал каталог как диск. Если я тогда войду START "" "Setup.exe" "/q" программа установки запустится точно так, как должна, и фактически установит приложение.

ОБНОВЛЕНИЕ 3

Выполняя отладку через ECHO заявления, я начал выводить TXT файлы в C:\ диск на клиентской машине. После того, как я позвонил PUSHD я ECHOред %CD% чтобы увидеть текущий каталог. В итоге получилось C:\Windows не {?}:\Client как и должно быть, если он успешно смонтировал удаленный каталог.

Я думаю, это как-то связано с сообщениями, которые я получаю в самом верху экрана, о том, что пути UNC не поддерживаются, бла-бла-бла, хотя остальная часть скрипта фактически выполняется.

Все еще ищу предложения, как заставить это работать.

Похоже на проблему с разрешением. Если вы делаете это в сценарии запуска, он будет работать как SYSTEM. Вам нужно будет дать Domain Computers доступ для чтения к месту хранения файлов.

Ставьте кавычки вокруг пути к акциям. У вас есть пробел в имени общего ресурса, и я предполагаю, что это причина проблемы.

Предложения, которые могут вам помочь.

1)

Вы можете использовать psexec sysinternal, чтобы открыть окно cmd как СИСТЕМУ для отладки "psexec \ 127.0.0.1 / s cmd". Оттуда вы можете пройтись по сценарию "построчно", чтобы увидеть, где он не работает.

2)

Вы можете изменить сценарий так, чтобы он запускался в текущем каталоге с префиксом "% ~ dp0".

Вы пробовали пропустить команду СТАРТ?

PUSHD \ WIN2K8R2-PSA-01 \ Данные PSA \ Клиент

% ~ dp0Setup.exe "" / q "

Проблема в том, что вы выскочили до завершения настройки. Это потому, что cmd запускает установку и сразу же продолжает команду popd.

Use start "" Setup.exe /wait /q

вы также можете использовать путь UNC. Может, вам нужны цитаты.

start "Setup title" "\\server\share\folder\setup.exe" /q