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

Возможности использования Psexec в 64-разрядной версии Windows Server 2003

локальная ОС: Windows Server 2003 удаленная ОС: Windows Server 2003 64-разрядная

У меня есть сервер управления (32-разрядный), на котором запущено множество запланированных пакетных сценариев. Один из сценариев - использовать psexec запустить процесс на удаленном хосте (64-бит).

Мой сценарий просто делает это ниже. Однако он вернется "The handle is invalid".

C:\psexec.exe \\%HOST% -i 1 -d -u %ADMINID% -p %ADMINPASSWORD% -w %PATH% MyApplication.exe

Поиск в Интернете обнаружил, что RDP для сеанса 1 и psexec для сеанса 1 могут иметь разную среду и разные доступные системные ресурсы (дескрипторы). Вероятно, поэтому мой сценарий psexec не работает.

Однако заставить psexec работать в консольном сеансе в скрипте действительно работает.

C:\psexec.exe \\%HOST% -i 0 -d -u %ADMINID% -p %ADMINPASSWORD% -w %PATH% MyApplication.exe

Некоторые люди говорят, что запуск psexec под WoW64 или разрешение psexec запускать приложение под WoW64 может быть решением на 64-битных машинах. Я предполагаю, что psexec на консольном сеансе делает то же самое. Кто-нибудь может подтвердить?

Мой вопрос: у моего приложения есть графический интерфейс, поэтому мне все еще нужно, чтобы он работал в пользовательском сеансе. Есть какой-либо способ сделать это? Пожалуйста, посоветуйте, спасибо.

Вы можете работать в интерактивном режиме, используя следующую команду:

C:\psexec.exe \\%HOST% -i 0 -d -u %ADMINID% -p %ADMINPASSWORD% -w %PATH% cmd /c MyApplication.exe 

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

Поиск в Интернете обнаружил, что RDP для сеанса 1 и psexec для сеанса 1 могут иметь разную среду и разные доступные системные ресурсы (дескрипторы). Вероятно, поэтому мой сценарий psexec не работает.

Нет, в этом нет смысла. Хотя это правда, что некоторые дескрипторы могут быть разделены (фактически унаследованы) между процессами, это не имеет никакого смысла вне рамок программирования.

Некоторые люди говорят, что запуск psexec под WoW64 или разрешение psexec запускать приложение под WoW64 может быть решением на 64-битных машинах. Я предполагаю, что psexec на консольном сеансе делает то же самое. Кто-нибудь может подтвердить?

WoW64 означает «Windows на Windows 64». По сути, это 32-битная среда внутри ОС Windows 64. Каждый исполняемый файл win32 будет работать «под» WoW64: другого пути для запуска нет, потому что они не могут использовать 64-битную версию функций ОС: им необходимо пройти уровень перевода, предоставляемый WoW64.

Мой вопрос: у моего приложения есть графический интерфейс, поэтому мне все еще нужно, чтобы он работал в пользовательском сеансе. Есть какой-либо способ сделать это? Пожалуйста, посоветуйте, спасибо.

Вероятно, это причина того, что ваше приложение терпит неудачу (не PSexec, а ваше приложение): оно пытается получить дескриптор окна, и, поскольку он не работает в интерактивной среде, этот вызов терпит неудачу (я предполагаю, что он пытается получить доступ к проводнику или чему-то еще).

(кроме того, попробуйте добавить переключатель -i, как предложил Рупасри Сомаварапу: он должен работать)