Описание функции


RunAs

Запускает внешнюю программу от другого пользователя.

RunAs('username','domain','password',logon_flag,'program'[,'workingdir'[,show_flag[,opt_flag]]])

Параметры

username Имя пользователя.
domain Домен для аутентификации.
password Пароль пользователя.
logon_flag 0 - интерактивный вход без профиля.
1 - интерактивный вход с профилем.
2 - только сетевые учётные данные.
4 - наследование переменных сред процесса вместо пользовательских.
program Полный путь к программе (EXE, BAT, COM или PIF) для запуска (см. примечания).
workingdir [необязательный] Рабочий каталог. Если не указан, то используется значение @SystemDir. Это не путь к программе.
show_flag [необязательный] Режим отображения запускаемой программы:
@SW_HIDE = скрытое окно (или ключевое слово Default)
@SW_MINIMIZE = свернутое окно
@SW_MAXIMIZE = развернутое окно
opt_flag [необязательный] Управление различными опциями взаимодействия процессов родительского и дочернего.
0x1 = предоставить указатель дочернего потока STDIN
0x2 = предоставить указатель дочернего потока STDOUT
0x4 = предоставить указатель дочернего потока STDERR
0x8 = предоставить указатель STDOUT и STDERR.
0x10 = предоставить дочерний от родительского потока STDIO. Этот флаг не может быть совмещен с любым другим флагом STDIO. Этот флаг имеет смысл только, когда родительская программа скомпилирована как консольное приложение.
0x10000 = дочерний консольный процесс должен быть создан в собственном окне, вместо использования родительского окна. Этот флаг имеет смысл только, когда родительская программа скомпилирована как консольное приложение.

Возвращаемое значение

Успех:Возвращает PID запущенного процесса.
Ошибка:Возвращает 0 и устанавливает @error не равным нулю.

Примечания

Пути с пробелами должны быть заключены в кавычки.

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

Рекомендуется загружать профиль пользователя только тогда, когда вы уверены, что это необходимо. Существует небольшая вероятность, что профиль может зависнуть в памяти при определенных условиях. Если утилита с использованием RunAs() случайно запущена от SYSTEM (например, если утилита запущен как служба) и загружен профиль пользователя, тогда вы должны позаботится чтобы утилита оставалась запущенной до завершения дочернего процесса.

При выполнении утилиты от Администратора, служба Вторичного входа (RunAs) должна быть включена или функция не будет выполнена. Это не относится к случаю, когда запуск происходит от имени SYSTEM.

После запуска внешней программы утилита продолжает выполняться. Чтобы приостановить выполнение утилиты, ожидая завершения внешней запущенной программы используйте RunAsWait().

Опции "Вход с профилем" и "Только сетевые учётные данные" несовместимы. Использование обоих создаёт неопределённый результат.


Функцию можно подключить через команду exect
Для передачи пустой строки можно воспользоваться ключевым словом Null
Для передачи значения по умолчанию можно воспользоваться ключевым словом Default

См. также

Run, RunWait, RunAsWait, ShellExecute, ShellExecuteWait, ProcessClose

Примеры:
 Как создать кнопку?


exect=RunAs('Username',@ComputerName,'Password',0,'notepad.exe',Null,@SW_SHOWMAXIMIZED) ;; запускает "Блокнот" развёрнутым на весь экран от имени указанного выше пользователя


© Аверин Андрей для Total Commander Image  Averin-And@yandex.ru