2014-09-09 1 views
1

Нам нужно запустить процесс с требуемыми правами администратора (определенными в его app.manifest) в обычном процессе и прочитать его вывод. Как я вижу это, чтобы начать процесс с более высоким правом, нам нужно установить UseShellExecute = true. Но это мешает нам получать стандартный вывод.
Вот мой фрагмент кода, но она нуждается в текущем процессе, чтобы иметь привилегии администратора тоже (что мы не можем себе позволить, так это огромное приложение, и это единственный раздел, который нуждается в высоте):Запустить процесс с более высокими привилегиями и прочитать его вывод

if (bAdmin) 
{ 
    Process p = new Process 
    { 
     StartInfo = 
     { 
      Arguments = "-GetRestorePoints", 
      FileName = Environment.CurrentDirectory + @"\Hamekare.AdminSettings.exe", 
      CreateNoWindow = true, 
      WindowStyle = ProcessWindowStyle.Hidden, 
      RedirectStandardOutput = true, 
      UseShellExecute = false 
     } 
    }; 

    p.OutputDataReceived += p_OutputDataReceived; 
    p.Start(); 
    p.BeginOutputReadLine(); 
} 

ответ

0

Я в конечном итоге используя Named Pipes.
Сервер:

PipeSecurity ps = new PipeSecurity(); 
PipeAccessRule psRule = new PipeAccessRule(@"Everyone", PipeAccessRights.ReadWrite, System.Security.AccessControl.AccessControlType.Allow); 
ps.AddAccessRule(psRule); 
var server = new NamedPipeServerStream("HKBackUpRestorePipe", PipeDirection.InOut, 1, PipeTransmissionMode.Message, PipeOptions.Asynchronous, 1, 1, ps); 
server.WaitForConnection(); 

StreamWriter writer = new StreamWriter(server); 
writer.WriteLine ... 
writer.Flush(); 

Клиент:

var client = new NamedPipeClientStream("HKBackUpRestorePipe"); 
client.Connect(); 
StreamReader reader = new StreamReader(client); 
StreamWriter writer = new StreamWriter(client); 

string line; 

while ((line = reader.ReadLine()) != "\t\t<<Finished!>>") 
    ... 
Смежные вопросы