Я запустил свое приложение как обычный пользователь, однако иногда мне нужно запустить повышенный процесс, который запускает другое приложение. Другое запущенное приложение находится в подпапке «Исполняемые файлы». Все пользователи имеют полный доступ к файлам в текущем каталоге и подкаталогах.
Код, который я использую:
public bool CreateElevatedProcess(ActionData data, bool log)
{
if (!string.IsNullOrEmpty(data.Arguments) && NormalUser.HasCredentials)
{
_proc = new Process
{
StartInfo =
{
Verb = "runas",
FileName = data.Filename,
//WorkingDirectory = data.File.DirectoryName,
Arguments = data.Arguments,
UseShellExecute = false,
CreateNoWindow = true,
WindowStyle = ProcessWindowStyle.Hidden,
UserName = NormalUser.Name,
Password = GetSecureString(NormalUser.Password),
Domain = NormalUser.Domain
}
};
return true;
}
return false;
}
private bool StartProcess()
{
if (_proc != null)
{
try
{
_proc.Start();
_proc.WaitForExit();
return true;
}
catch (Win32Exception ex)
{
// throws win32exception due to directory name is invalid or the specified file not found
}
}
return false;
}
Я попытался установить параметр WorkingDirectory, но я не уверен, работает ли он, поскольку для UseShellExecute задано значение false.
Что я испытываю:
Когда я запускаю приложение на компьютере разработчика, все работает нормально. Я даже скопировал папку вне Visual Studio и в папку TEMP на C: \ без проблем. Тем не менее, на другом компьютере я буду испытывать либо неверное имя каталога, либо указанный файл не найден. По всей вероятности, это проблема прав пользователя, однако все пользователи имеют полный доступ ...
Как правильно запустить процесс с повышенными правами с файлом из подкаталога?
Добавление примера:
Свойство имени файла получает: Executables \ rc.exe
Свойство аргумента получает: 1 lester \ mrburns
Свойство filename получает только путь к подпапке, а не полный путь из-за того, что родительский путь может быть ограничен.