File.RunAs

number File.RunAs ( string Filename,
string Args = "",
string WorkingFolder = "",
number WindowMode = SW_SHOWNORMAL,
boolean WaitForReturn = false,
string UserName = "",
string Password = "",
string Domain = "",
number LogonFlag = LOGON_NO_OPTION,
table CreationOptions = nil,
table ExtendedErrorInfo = nil )
Примеры

Описание

Запускает исполняемый файл от другого пользователя.

Примечание: Это действие работает только в оперативных системах, поддерживающих профили пользователей, поэтому оно поддерживается на Windows 2000, Windows Server и Windows XP. Действие не поддерживается не-NT оперативными системами, такими как Windows 95/98/ME.

Параметры

Filename

(строка) Путь к исполняемому (.exe) файлу.

Args

(строка) Аргументы командной строки для передачи исполняемому файлу.

WorkingFolder

(строка) Рабочая папка устанавливаемая для исполняемого файла.

Примечание: Этот параметр устанавливает текущую рабочую папку какой-то другой, чем папка в которой находится файл. Как правило, его оставляют пустым..

WindowMode

(число) Используемый режим (вид) окна:

КОНСТАНТА
CONSTANT
ЗНАЧЕНИЕ
VALUE
ОПИСАНИЕ
DESCRIPTION
SW_SHOWNORMAL1Обычный. (По умолчанию)
SW_MAXIMIZE3Развернутый.
SW_MINIMIZE6Свернутый.
SW_HIDE0Скрытый.

WaitForReturn

(логический) Будет ли приложение ждать окончания работы исполняемого файла, чтобы продолжить свою работу:

ЗНАЧЕНИЕ
VALUE
ОПИСАНИЕ
DESCRIPTION
trueЖдать.
falseНе ждать. (По умолчанию)


Примечание: Этот параметр должен быть установлен как истина (true), если нужно принимать код возвращения процесса.

UserName

(строка) Имя пользователя, которое будет использоваться для запуска файла. Нужно использовать формат UPN (User Principal Name) (например, user@DNS_domain_name), если входите на сетевой домен и не указываете параметр Domain.

Password

(строка) Пароль для указанного имени пользователя.

Domain

(строка) Домен или сервер, который содержит базу данных учетных записей для указанного пользователя. Если домен не указан, параметр UserName должен быть в формате UPN (например, user@DNS_domain_name), если входите в сетевой домен.

LogonFlag

(число) Используемый флаг вход в систему. Выбор из:

КОНСТАНТА
CONSTANT
ЗНАЧЕНИЕ
VALUE
ОПИСАНИЕ
DESCRIPTION
LOGON_NO_OPTION0Не входим с любым профилем. (По умолчанию)
LOGON_WITH_PROFILE1Входим, затем загружаем профиль пользователя в ключ реестра HKEY_USERS. Загрузка профиля может занять много времени, так что лучше использовать это значение только если нужен доступ к информации в ключе реестра HKEY_CURRENT_USER.
LOGON_NETCREDENTIALS_ONLY2Входим, но используем указанные учетные данные только в сети. Это значение может быть использовано для создания процесса, который использует локально другой набор учетных данных, нежели чем он это делает удаленно. Это полезно в междоменных сценариях, где нет проверенных взаимоотношений.

Примечание: Система не проверяет указанные учетные данные. Поэтому процесс может начаться, но он может не иметь доступа к сетевым ресурсам.

CreationOptions

(таблица) Таблица, содержащая параметры создания по имени, которые управляют процессом создания. В таблице значение истина - true включает параметр, а значение ложь - false отключает его. Если передается значение nil, параметры DefaultErrorMode, NewConsole и NewProcessGroup устанавливаются как истина - true по умолчанию.
В таблице могут быть установлене или сброшены следующие опции:

КЛЮЧ
KEY
ТИП
TYPE
ОПИСАНИЕ
DESCRIPTION
DefaultErrorModeлогическийНовый процесс не наследует режим обработки ошибок вызывающего процесса. Взамен, новому процессу дается текущий режим обработки ошибок по умолчанию. Можно передать значение ложь - false для наследования режима обработки ошибок вызывающего процесса, например {DefaultErrorMode=false}
NewConsoleлогическийИмеет или нет новый процесс новую консоль, взамен наследования родительской консоли, например {NewConsole=false}
NewProcessGroupлогическийЯвляется или нет новый процесс корневым процессом новой группы процессов. Группа процесса включает все процессы, которые являются потомками корневого процесса, например {NewProcessGroup=false}
SeparateWOWVDMлогический Запускать или нет новый процесс в отдельной Virtual DOS Machine (VDM). По умолчанию все 16-разрядные приложения Windows выполняются в одной, общей VDM. Преимущество отдельного запуска в том, что в случае сбоя прекращается работа одной VDM; все другие программы работающие в отдельных VDM-ах продолжат нормально работать. Кроме того, 16-битные приложения Windows, запущенные в отдельных VDM-ах, имеют раздельные очереди ввода, что означает, если одно приложение прекращает отвечать на запросы, то приложения в отдельных VDM-ах продолжат получать входные данные, например {SeparateWOWVDM=true}

Примечание: Этот флаг применим только при запуске 16-битных приложений Windows.
SuspendedлогическийСоздавать или нет основной поток (тред) нового процесса в приостановленном состоянии, например {Suspended=true}
UnicodeEnvironmentлогическийИспользует или нет программный блок символы Unicode. В противном случае, программный блок использует символы ANSI, например {UnicodeEnvironment=true}

ExtendedErrorInfo

(таблица) Таблица, которая будет заполнена дополнительной информацией об ошибке, индексированная следующими ключами:

КЛЮЧ
KEY
ТИП
TYPE
ОПИСАНИЕ
DESCRIPTION
ErrorCodeчислоКод ошибки Windows.
ErrorMsgстрокаСообщение об ошибке Windows.


Примечание: Поскольку этот параметр требует таблицу, сначала перед вызовом действия нужно создать таблицу, например, TableName={};

Возврат

ResultVariable

(число) Процесс возвращает код если параметр WaitForReturn установлен в истину (true). Если параметр WaitForReturn установлен как ложь (false) возвращается 0. Можно использовать Application.GetLastError для определения случился ли отказ в работе этого действия и почему.

Примечание: Возвращаемое состояние завершения может быть одним из следующих:
    Выходное значение указывается в функциях ExitProcess или TerminateProcess.
    Значение возврата из основной функции или функции WinMain процесса.
    Исключительное значение для необработанного исключения, вызвавшего окончание процесса.
Смотрите также: Связанные действия

Примеры

Пример 1

ReturnCode = File.RunAs(_TempFolder .. "\\setup.exe", "/W", "", SW_SHOWNORMAL, true, "TestUser", "fake_password", "", LOGON_NO_OPTION, nil, nil);
Используя разрешения пользователя "TestUser", запускаем файл "setup.exe",размещенный в папке пользователя Temp, передаем ему /W, как аргумент командной строки, и ждем окончания работы setup.exe перед тем как продолжить следующее действие. Любой код, возвращенный "setup.exe" сохраняем в переменной "ReturnCode".

Примечание: _TempFolder это встроенная переменная, что содержит путь к папке "Temp" в системе пользователя.

Пример 2

-- Create the extended error info table.
-- Создаем таблицу с дополнительными данными об ошибке.
ExtendedErrorInfo = {};

-- Run the file as an administrator.
-- Запускаем файл как администратор.
nReturnCode = File.RunAs(_TempFolder .. "\\SetupTest.exe", "/W", "", SW_SHOWNORMAL, true, "Administrator", "master_password", "work.fakedomain.com", LOGON_WITH_PROFILE, nil, ExtendedErrorInfo);
error = Application.GetLastError();

-- Check if the action succeeded or failed and display the error messages.
-- Проверяем успешно ли действие или неудачно и показываем сообщение об ошибке.
if (error ~= 0) then
    Dialog.Message("Error", _tblErrorMessages[error] .. "\r\n" .. ExtendedErrorInfo.ErrorCode .. ": " .. ExtendedErrorInfo.ErrorMsg);
end
Используя разрешения пользователя "Administrator" запускаем файл "SetupTest.exe", размещенный в папке пользователя Temp, передаем ему /W, как аргумент командной строки, и ждем окончания работы SetupTest.exe перед тем как продолжить следующее действие. Любой код, возвращенный "setup.exe" сохраняем в переменной "ReturnCode" и если произошла ошибка показываем диалоговое окно с кодом ошибки и сообщениями.
Смотрите также: Связанные действия