2011-12-31 5 views
5

나는 다음과 같은 코드로 cmd를 명령을 실행하려고 : 내가 관리자로 cmd를 실행하고 완벽하게 작동하지만이 실행되지 않을 때 명령을 입력하면이 명령은, 관리자 privelages을 필요로 실행 상승 과정

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()); 

관리자 로이 응용 프로그램. 나는 UAC에게 내가 EXE 파일을 열 때마다 묻는 매니페스트 파일에

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

을 추가했습니다.

이것에 대해 여러 질문을 보았습니다. 상승 된 응용 프로그램에서 실행되는 프로세스가 모두 동일한 권한을 갖지만이 프로세스가 저를 위해 작동하지 않는다고 생각하는 것 같습니다.

나는 cmd.Verb = "runas";을 시도했지만 주사위는 사용하지 않았습니다.

+0

변화를 시도'cmd.UseShellExecute'에 'TRUE'를하고 'runas' 동사를 유지한다. – keyboardP

+0

방금 ​​시도했지만이 오류가 발생했습니다. 'IO 스트림을 리디렉션하기 위해 Process 객체의 UseShellExecute 속성을 false로 설정해야합니다.'감사합니다. –

+4

그것이 바로 벅이 멈추는 곳입니다. 두 가지 방법이 있습니다. UAC는 고르지 않은 프로세스가 상승 된 프로세스의 성능을 높이는 것을 방지합니다. 리디렉션 할 수있는 유일한 방법은 먼저 자신을 높이는 것입니다. –

답변

13

당신은 존중되어야하는 Verb에 대한 trueUseShellExecute를 설정해야하고 그것은 표준 출력을 리디렉션 '거짓'으로 설정해야합니다. 둘 다 할 수는 없습니다.

나는 Windows가 관리자/비 관리자 보안 경계를 통해 표준 입력/출력/오류를 리디렉션 할 수 없도록하고 있습니다. 관리자로 실행되는 프로그램의 출력을 얻으려면 다른 방법을 찾아야합니다.

이 기사를 읽지 않았다, 그러나 이것은 당신에게 더 많은 정보를 제공 할 수 있습니다 : http://www.codeproject.com/KB/vista-security/UAC__The_Definitive_Guide.aspx

+0

UseShellExecute = false를 사용해 봅니다. 동사 = "runas"; RedirectStandardInput = true; 도메인 = 뒤 [0]; UserName = UserAdministrator; Password = SecureStringHelper.ToSecureString (pwd); LoadUserProfile = true; 그리고 manifest에서 requestedExecutionLevel을 사용하고 있습니다. UseShellExecute = true를 사용하면; 오류가 발생합니다 프로세스 개체가 UseShellExecute 속성을 false로 설정하여 사용자로 프로세스를 시작해야합니다. – Kiquenet

+0

admin으로 실행되는 프로그램에서 전체 샘플을 다른 방법으로 출력 하시겠습니까? – Kiquenet

2

ProcessStartInfo 개체에 관리 자격 증명을 할당 해 보았습니까?

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

여러 대의 PC에서 사용할 것이므로 UAC가 프롬프트 할 때이 작업을 수행 할 수 없습니다. 감사합니다. –

+0

좋습니다. 왜 명령 프로세스를 작성하고 "sc"명령을 직접 실행하지 않고 "sc"를 실행하도록 명령 프로세스를 작성하는지 설명 할 수 있습니까? – Abbas

+0

사용자가 프로그램 사용을 쉽게하기 위해 sc를 사용하는 방법을 모르므로 winform의 단추를 통해 sc 명령을 실행하려고합니다. –