2011-03-07 12 views
1

폴더의 소유자 문제를 해결하려고합니다. SetACL을 사용하고 있습니다. cmd를 사용하여 인수를 사용할 수 있지만 프로그램에 추가하려고하면 ... 작동하지 않습니다. 인수가 올바르게 전달되도록 중단 점을 설정했습니다. 어떤 도움도 환영합니다.C# 명령 줄 SetACL

 Process p = new Process(); 

     if (Wow.Is64BitOperatingSystem == true) 
     { 
      p.StartInfo.FileName = "SetACLx64.exe"; 
     } 
     else 
     { 
      p.StartInfo.FileName = "SetACLx86.exe"; 
     } 

     string command = @" -on """ + path + 
      @""" -ot file -actn setprot -op ""dacl:np;sacl:nc"" -actn setowner -ownr ""n:" + account + @";"" -rec cont_obj"; 
     p.StartInfo.Arguments = command; 
     p.Start(); 

저는 레지스트리 문제와 관련하여 동일한 프로그램에서 문제없이 작동하도록했습니다. 이 예제가 작동하지 않습니다. 설정하려고하는 폴더는 %temp% 폴더입니다.

+0

는 관리자로 실행 (디버깅하는 동안 대) 프로세스인가? –

+0

예. 임시 폴더가 아닌 다른 폴더로도 작업 할 수 있습니다. –

+0

구문이 올바른 경우 작동해야합니다. 배치 파일을 통해 해보십시오. 'Process.Start ("test.bat", "% temp %");'그리고 % 1을 사용하여 bat 파일의 첫 번째 매개 변수를받습니다. –

답변

0

Sanjeevakumar 다음 명령 변수의 첫 번째 공간을 제거

시도를 요청대로 관리자로 실행됩니다. Arguments 매개 변수에는 인수의 초기 공간을 제공 할 필요가 없습니다. 그 원인이 문제 일 수 있습니다.

Start() 메서드를 호출하기 전에 다음 줄을 추가하여 프로세스의 오류 데이터를 탭해 봅니다.

p.StartInfo.UseShellExecute = false; 
p.StartInfo.RedirectStandardError = true; 
p.ErrorDataReceived += new DataReceivedEventHandler(ErrorDataHandler); 

그런 다음 이벤트 처리기를 정의하십시오.

private static void ErrorDataHandler(object sendingProcess, DataReceivedEventArgs e) 
{ 
    //using the DataReceivedEventArgs see if there is an error. 
    //If it comes there there is most likely an error. 
} 
+0

오류 메시지 없음 :( –

+0

@ John Andrews는 출력 스트림에 tqapping을 시도하고 (출력 스트림에 표시 한 것과 비슷 함) 출력이 있는지 확인합니다. –

0

경로가 "% temp %"이면 코드가 작동하지 않습니까? 이 경우 솔루션은 간단합니다. SetACL은 변수 확장을하지 않지만 SetACL을 시작하기 전에 명령 쉘을 시작합니다. cmd.exe를 호출하지 않고 직접 SetACL을 시작하면 변수 확장이 수행되지 않습니다.

  1. Environment.GetEnvironmentVariable와 C# 코드에 "% temp %를"을 확장합니다

    당신은 두 가지 옵션이 있습니다.

  2. 전화 같은 cmd를 통해 SETACL : cmd를/C SETACL -on % temp %를 -ot 파일 ...