2013-01-19 6 views
0

저는 기술 도구 키트 프로그램을 만드는 중입니다.이 '도구 키트'에 포함 된 도구는 로컬에서 조각 모음을 실행하는 버튼입니다 디스크.Windows 조각 모음이 내부 또는 외부 명령, 작동 가능 프로그램 또는 배치 파일로 인식되지 않습니다.

defrag C: /A 

이 트리거 버튼 뒤에 C# 코드는 다음과 같습니다 :

System.Diagnostics.ProcessStartInfo procInfo = 
    new System.Diagnostics.ProcessStartInfo(); 
procInfo.Verb = "runas"; 
procInfo.FileName = "(My Disk):\\PreDefrag.bat"; 
System.Diagnostics.Process.Start(procInfo); 

이 코드는 이름 그대로 현재 내가이 만들어 한 배치 파일은 간단하다, 그냥 기본 조각 분석을 실행 내가 원한다면, UAC는 행정 권한으로 배치 파일을 실행합니다. 일단 배치 파일이 실행 되더라도 명령 콘솔에 수신되는 출력은 다음과 같습니다.

C:\Windows\system32>defrag C: /A 
'defrag' is not recognized as an internal or external command, 
    operable program or batch file. 

이 오류의 원인과 해결 방법은 무엇입니까?

+0

PreDefrag.bat 파일의 내용을 게시하십시오. 그리고 어떤 운영 체제를 사용하고 있습니까? 윈도우 7? Windows Vista? Windows Home Premium? 윈도우 XP? Windows 2000? –

답변

2

defrag.exe 파일이 실제로 C : \ Windows \ System32에 있는지 확인하십시오.

C:\WINDOWS\system32\defrag.exe C: /A 

는 cmd를 프롬프트를 열고 다음 명령을 실행합니다 :

완전히로 '조각 모음'명령을 자격을 시도 defrag.exe /? 및 게시물을 당신이 무엇을 얻을 질문에.

+2

또는 프로세스의 작업 디렉토리를'Environment.GetFolderPath (Environment.SpecialFolder.System) '로 설정하십시오. – abatishchev

+0

배치 파일의 defrag 끝에 .exe를 추가하면 모든 것이 수정되었습니다. 좋아 고마워. –

1

우선 : 속성을 Any CPU으로 설정하고 Prefer 32-bit 옵션을 해제하십시오 (99,9 %가 문제 임). 그럼 ... 왜이 일을 할 수있을 때 명령을 호출하는 배치를 시작하는거야?

ProcessStartInfo info = new ProcessStartInfo(); 
info.Arguments = "/C defrag C: /A"; 
info.FileName = "cmd.exe"; 
info.UseShellExecute = false; 
info.Verb = "runas"; 
info.WindowStyle = ProcessWindowStyle.Hidden; 

Process.Start(info); 

내 컴퓨터에서 매력처럼 작동합니다. 여러 명령의 경우 :

ProcessStartInfo info = new ProcessStartInfo(); 
info.FileName = "cmd.exe"; 
info.RedirectStandardInput = true; 
info.UseShellExecute = false; 

Process cmd = Process.Start(info); 

using (StreamWriter sw = p.StandardInput) 
{ 
    if (sw.BaseStream.CanWrite) 
    { 
     sw.WriteLine(command1); 
     sw.WriteLine(command2); 
     // ... 
+0

여러 명령어를 실행할 수 있습니까? –

+0

물론, 나는 나의 대답을 편집했다. –

+0

여러 명령을 실행하기 위해 코드를 사용할 때 "runas"를 사용할 수 없습니다. 할 수 있으면 좋겠지 만 코드에 추가하면 UAC가 실행되지 않습니다. . –