Запустите повышенный процесс - PullRequest
5 голосов
/ 01 января 2012

Я пытаюсь запустить команду cmd со следующим кодом:

ProcessStartInfo cmd = new ProcessStartInfo("cmd.exe");
cmd.RedirectStandardInput = true;
cmd.RedirectStandardOutput = true;
cmd.RedirectStandardError = true;
cmd.UseShellExecute = false;
cmd.CreateNoWindow = true;
cmd.WindowStyle = ProcessWindowStyle.Hidden;
Process exec = Process.Start(cmd);
exec.StandardInput.WriteLine("sc create \"BaliService\" binPath= \"{0}\\BaliService.exe\"", Directory.GetCurrentDirectory());

Эта команда требует привилегий администратора, если я запускаю cmd от имени администратора и набираю команду, она отлично работает, но не при этомприложение в качестве администратора.Я добавил

<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />

в файл манифеста, который запрашивает uac каждый раз, когда я открываю exe.

Я видел несколько вопросов по этому вопросу, и все они, похоже, предполагают, что любые процессы, запущенные в приложении с повышенными правами, будут иметь одинаковые права, но это не работает для меня.

Я пробовал cmd.Verb = "runas";, но без игры в кости.

Ответы [ 2 ]

13 голосов
/ 01 января 2012

Вам необходимо установить UseShellExecute на true, чтобы Verb был соблюден, и его необходимо установить на «ложь», чтобы перенаправить стандартный вывод. Вы не можете сделать оба.

Я почти уверен, что Windows также не позволит вам перенаправить стандартный ввод / вывод / ошибку через границы безопасности администратора / не администратора. Вам нужно будет найти другой способ получить выходные данные из программы, работающей от имени администратора.

Я не читал эту статью, но это может дать вам больше информации: http://www.codeproject.com/KB/vista-security/UAC__The_Definitive_Guide.aspx

2 голосов
/ 01 января 2012

Вы пытались присвоить административные учетные данные для вашего ProcessStartInfo объекта?

SecureString password = new SecureString();
password.AppendChar('p');
password.AppendChar('w');
cmd.UserName = "admin";
cmd.Password = password;
...