1

Process 클래스를 사용하여 배치 파일을 실행하려고합니다. 이 코드는 LogonUser() 및 WindowsIdentity.Impersonate()를 사용하여 로컬 PC 관리자 계정을 가장하는 코드 섹션의 중간 부분에 있습니다.System.Diagnostics.Process가 자격 증명을 승인하지 않습니다.

ProcessStartInfo에 자격 증명을 추가하지 않고 프로세스 내에서 배치 파일을 실행하려고했지만 배치 파일이 자동으로 실패하게되어 오류가 발생하지 않고 배치 파일의 예상 출력이 반환되지 않았습니다. (나는 stderr와 stdout를 비동기 적으로 읽는다, fwiw).

다음 ProcessStartInfo 자격 증명을 추가했지만 WindowsImpersonationContext.Undo() 및 "로그온 실패 : 알 수없는 사용자 이름 또는 잘못된 암호"오류를 먼저 호출하지 않으면 "액세스가 거부되었습니다"오류가 발생합니다. Process.Start() 전에 .Undo()를 호출하십시오. 여러 계정에 대해 사용자 이름/암호/도메인이 올바른지 세 번 확인했습니다.

내 코드에 LogonUser() 또는 WindowsIdentity.Impersonate() 호출이없고 ProcessStartInfo에 자격 증명이없는 경우 캡처 및 배치 파일에서 실행중인 배치 파일의 출력에 문제가 없습니다.

데스크톱에서 배치 파일을 로컬 관리자 또는 임의의 로컬 사용자 계정으로 성공적으로 실행할 수 있습니다. 그 권한을 볼 수 있습니다 그것은 읽을 수 있어야합니다/실행할 수있는 계정에서 실행할 수 있어야합니다. 이것은 실제로 상당히 갑작스런 일입니다. 어떤 도움을 주셔서 감사합니다.

답변

0

문제는 모든 3 개의 스트림을 리디렉션해야한다는 것이 었습니다. 나는 2를 리다이렉트 (out, err, not in)했다. 그것은 기본적으로 고정 된 것들입니다.

0

이런 종류의 제품을 찾고 계십니까?

Process proc = new Process(); 
proc.StartInfo.FileName = @"C:\WINNT\notepad.exe"; 
proc.StartInfo.UseShellExecute = false; 
proc.StartInfo.CreateNoWindow = true; 

proc.StartInfo.Domain = "mydomain.com"; // Domain of IIS Computer 
proc.StartInfo.UserName = "kaung"; //Administrator for that computer 
System.Security.SecureString password = new System.Security.SecureString(); 
password.AppendChar('m'); //Password 
password.AppendChar('y'); 
password.AppendChar('p'); 
password.AppendChar('a'); 
password.AppendChar('s'); 
password.AppendChar('s'); 
password.AppendChar('w'); 
password.AppendChar('o'); 
proc.StartInfo.Password = password; 

proc.Start();