2014-09-09 5 views
1

정상적인 프로세스에서 필수 admin 권한 (해당 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!>>") 
    ...