Проблема Psexec при запуске приложения на компьютере под управлением Windows Server 2008 R2 с компьютера 2003 года R2
9389
Vermin
Я пытаюсь запустить приложение на компьютере под управлением Windows Server 2008 R2 с компьютера под управлением Windows Server 2003 R2, используя командный файл со следующей строкой кода в командном файле:
Приложение не запускается правильно при запуске с использованием psexec, но приложение будет работать правильно, если я вошел в ночную машину с тем же пользователем и запустил ее по пути к файлу через cmd. Мне удалось получить ошибку, возвращенную в приложении из его журнала, и возвращаемое исключение следующее:
System.DllNotFoundException: Невозможно загрузить DLL 'rasapi32.dll': сбой процедуры инициализации библиотеки динамических ссылок (DLL). (Исключение из HRESULT: 0x8007045A)
После поиска этого кода ошибки в сети появилось много сообщений о том, что это вызвано повреждением файла, но я не понимаю, почему это так, поскольку приложение будет работать нормально, если его не запускать из psexec. (пользователь является администратором на обеих машинах)
Может кто-нибудь, пожалуйста, помогите мне в этом? Если для решения этой проблемы потребуется дополнительная информация, пожалуйста, спросите, и я сделаю все возможное, чтобы опубликовать ее.
2 ответа на вопрос
0
KCotreau
Я предполагаю, что ваш UNC в вопросе имеет только одну косую черту из-за необходимости напечатать его здесь для форматирования "\\\", но если нет, то исправьте это. Я думаю, что проблема в том, что psexec смотрит на ваши аргументы вне кавычек и не знает, что с ними делать. Самым простым способом может быть помещение команды, которую вы можете запустить на сервере, в пакетный файл и psexec этого пакетного файла, или вы можете попробовать переместить вторую кавычку после аргументов. Конечно, тогда у вас не должно быть пробелов на пути.
Спасибо за ваш ответ, но я попробовал оба предложенных вами решения, и, к сожалению, ни одно из них не решило проблему. Я попытался добавить аргументы в кавычки, что означало, что psexec не смог найти указанный путь к файлу (без пробелов в пути к файлу), и я также попытался использовать psexec для запуска пакетного файла на ночной машине, которая затем запускает приложение. та же проблема, что и раньше
Vermin 13 лет назад
0
@Vermin Если бы вы могли указать, какова настоящая команда, я могу помочь вам больше.
KCotreau 13 лет назад
0
The application is a purpose build deployment app which does various things (don't know what, i didnt write it, just need to get it to run remotely). the command is: psexec \\nightmachine -u DOMAIN\User -p Password -i "C:\Deployment\DeploymentAspplication\DeploySnapshot.exe" /latest /noninteractive The arguments are there so the app gets the latest files needed and so that it run without user interaction (even though psexex is running with the argument -i, but running without the -i means the app just hangs and does nothing).
Vermin 13 лет назад
0
Я был в состоянии определить строку кода, где выбрасывается исключение, и он просто запускает функцию, хранящуюся в другом классе в проекте приложения, которая прекрасно работает, когда не работает с psexec
Vermin 13 лет назад
0
@Vermin Я мог бы попытаться скопировать приложение локально и запустить его с ключом -c, также является ли удаленное приложение и все компоненты в системном пути?
KCotreau 13 лет назад
0
0
Vermin
Проблема решена! Я обнаружил, что приложение, запущенное на удаленном компьютере с помощью psexec, теряло свои пользовательские данные, когда приложение вызывало процессы вне себя, что означало, что любые необходимые разрешения были потеряны.
Чтобы обойти эту проблему, я настроил запланированную задачу на удаленном компьютере, где приложение живет, чтобы запустить приложение, используя необходимые учетные данные пользователя. Задача была настроена на однократное выполнение, но также настроена так, что ее можно запускать вручную. Это означало, что при запуске приложения задачей не было потеряно никаких разрешений. Я начал задачу с помощью Psexec: