3

Я работаю с бизнес-приложением, которое нужно запускать как пользователь домена. У меня есть пользователь, который хочет продолжать использовать локальную учетную запись (поскольку не все можно перенести в профиль пользователя домена), хотя компьютер присоединен к домену, поэтому я настроил ярлык, который запускает пакетный файл, который использует runas.exe , который запрашивает у пользователя пароль домена. Полный пакетный файл выглядит так:

cd \path\to\app
whoami | findstr /i "domain\\"
if errorlevel 1 (
 runas /user:domain\domuser \path\to\app\app.exe
) else (
 app.exe
)

(По сути, он runas только в том случае, если пользователь не вошел в систему как пользователь домена.) Я не использую другие ключи на runas , но когда я их пробую, /noprofile и /env , похоже, ничего не делают.

Это приложение запускается и отображает свой начальный экран после ввода пароля в runas . (Если он запускается как локальный пользователь, он выдает диалоговое окно сбоя, а здесь этого не происходит.) Тем не менее, приложение затем начинает плохо себя вести. Странная часть в том, что он работает нормально, если я Shift+ щелчок правой кнопкой мыши по нему (либо по ярлыку, либо по самому EXE-файлу) и выполняю функцию "Запуск от имени другого пользователя".

У меня нет доступа к источнику этой программы, и я не имею права обсуждать его особенности. Однако это не относится к делу - что отличается между запуском его с помощью runas и "Запуск от имени другого пользователя"?

Это 64-битная Windows 10 Pro, хотя я также вижу эту проблему на Windows 8.1 Pro.

1 ответ1

2

После некоторых экспериментов я заметил, что runas.exe всегда устанавливает каталог запуска программы в System32 , в то время как Запуск от имени другого пользователя устанавливает начальное направление к папке, содержащей EXE.

доказательство

Это можно продемонстрировать, создав пакетный файл, который содержит что-то вроде:

echo %cd%
pause

Поместите его в папку, доступную для всех пользователей. Если вы запустите его, просто дважды щелкнув его в проводнике, он покажет каталог, в котором он находится. Это будет делать то же самое, если вы используете Запуск от имени другого пользователя. Если вы откроете там окно командной строки и выполните runas /user:otheruser test.bat , произойдет сбой ("такого файла нет"), если test.bat не окажется на пути другого пользователя или PATH системы. Это потому что runas запускается в System32 . Если вы runas /user:otheruser \full\path\to\test.bat , он запустится и отобразит путь к System32 , потому что это его начальный каталог.

Исправление проблемы

Рассматриваемая программа делает странные вещи (но не падает), если она не видит определенные файлы в своем текущем / начальном каталоге. Обновите пакетный файл, чтобы использовать runas в пакетном файле, который сначала cd в нужный каталог, а затем запустит программу.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .