2011-03-16 9 views
3

업로드 된 모든 파일에서 바이러스 검사를 실행하는 배치 파일을 실행하기 위해 내 C# 프로그램에 메소드를 구현했습니다.C# 배치 파일을 실행하면 명령이 인식되지 않습니다.

public static Int32 ExecuteCommand(String filePath, Int32 Timeout){ 
    Int32 ExitCode; 
    ProcessStartInfo ProcessInfo = new ProcessStartInfo(); 
    ProcessInfo.CreateNoWindow = true; 
    ProcessInfo.UseShellExecute = true; 
    ProcessInfo.FileName = filePath; 
    Process proc = Process.Start(ProcessInfo); 
    proc.WaitForExit(Timeout); 
    ExitCode = proc.ExitCode; 
    proc.Close(); 
    return ExitCode; 
} 

이제 내 배치 파일.

@ECHO OFF 
c: 
cd "..\AVG\AVG9\" 
avgscana.exe /SCAN="..\learninglounge.com.solar.quarantine\" /REPORT="..\learninglounge.com.solar.antivirus\virusReports\report.txt" 

편집 : 나는 평균 EXE 파일 및 디렉토리에 대한 완전한 링크가 않지만 유래을 게시의 목적을 위해 .. 여기로 대체했다. 죄송합니다. 혼란이 생겼다면 죄송합니다.

내 문제는 내 배치 파일의보고 측면입니다. 배치 파일을 두 번 클릭하면 스캔하여 문제가없는 보고서를 만들 수 있습니다. 내 C#을 통해 실행할 때 # 2 종료 코드가; 명령이 인식되지 않습니다. 배치 파일의 보고서 부분을 제거하면됩니다. 이제 분명히이 권한은 쓰기 권한이 있지만이를 확인한 후 가장 된 사용자는 디렉토리에 대한 쓰기 권한을 갖습니다. 임 누락 된 것이 있습니까?

덕분에 모든

+1

avgscana.exe는 프로그램에있는 디렉토리에 있습니까? – TJHeuvel

+0

아니, 내가 파일 경로를 제거하고 여기에 대한 배치에서 ..로 대체하지만 실제 파일에서 정규화되었습니다 – Shannow

+0

일부 오프 주제 제안 : Microsoft는 CLR 유형 이름을 사용하지 말 것을 권장하지만 C#을 사용하십시오 사람. 그것은 Int32가 "int"로 선언되어야 함을 의미합니다. –

답변

0

그래, 잘 돌아가는 일이 생기면 오히려 그곳에 보고서를 저장하고 그 대신에 그냥 프로세스의 표준 출력을 캐치하고 파일 + 모든 처리에 저장합니다.

이상한 것이 있습니다. 배치 파일에서

0

당신은 당신은 cmd를 라인에서 배치 파일을 실행하는 모든 환경적인 변수가 정확히 동일하게 설정되어 있는지 확인해야합니다. 나는 약간의 차이가 있을지도 모른다라고 꽤 확신한다. 또한 어떤 종류의 운영 체제입니다. 이것이 고도가 필요한 경우 (비스타 윈도우 7) 실제로 코드에서 적절한 사용자로 가장해야 할 수도 있습니다. luke

+0

예 나는 가장 (impersonation)을 실행하고 사용자는 디렉토리에 대한 쓰기 권한이 있습니다. 어떤 종류의 환경 변수를 검사해야합니까? – Shannow

1

오류는 avgscana.exe이 명령을 실행할 때 "현재"로 설정된 디렉토리에 있지 않음을 나타냅니다. Windows 탐색기에서 bat 파일을 클릭하면 현재 디렉토리가 bat 파일이있는 디렉토리로 설정됩니다. 아마도 avgscana.exe은 같은 폴더에 있으므로 제대로 작동합니다.

.Net 응용 프로그램에서 명령을 실행하면 현재 디렉토리가 그대로 유지됩니다 (변경하지 않은 경우 .Net 응용 프로그램이있는 폴더가됩니다). .Net 앱이 박쥐 파일과 같은 폴더에 있지 않으면 실제로 얻는 오류가 발생합니다. 박쥐를 실행하기 전에 박쥐 파일에 전체 경로를 지정하거나 닷넷 앱에 Environment.CurrentDirectory을 설정해야합니다.

+0

나는 내 질문을 업데이트 할 것이지만 배치 파일에서 avg exe와 보고서를 저장할 폴더를 완전히 한정합니다. 나는 여기에 게시 할 목적으로 .. 넣었습니다. – Shannow

0

, 당신은이 :

c: 
cd "..\AVG\AVG9\" 
avgscana.exe 
    /SCAN="..\learninglounge.com.solar.quarantine\" 
    /REPORT="..\learninglounge.com.solar.antivirus\virusReports\report.txt" 

명령을 실행하면 C 드라이브의 '현재'디렉토리 : 모호합니다. 디렉터리 트리를 위로 이동하면됩니다. avgscana.exe 명령과 동일하게 절대 참조 대신 상대 참조를 작성합니다.

CD 명령으로 올바른 디렉토리로 이동 했습니까? CD 명령을 절대 참조 (cd "c : \ where \ avg \ avg9 \")로 변경하면 avgscana 명령의 상대 참조가 있는지 확인할 수 있습니다.

CD 명령이 자동으로 실패 할 수 있지만 avgscana.exe가 경로에 있으므로 실행할 수 있지만 관련/검사 및/보고서 위치를 찾을 수 없으므로 코드 2로 실패합니다.

행운을 빌어 요!

+0

필자는 필자의 경로가 절대적이며 아무런 문제가 없다는 것을 여러 번 언급했다고 생각한다. 문제는/Report 명령과 관련이 있습니다. 나는 그것의 벌금을 제거하고 나는 표준 출력을 잡아서 스캔의 결과를받는 것으로 이것을 증명한다. 내가 다시 넣어/보고서를 종료 코드 2와 함께 실패합니다. 윈도우에서 클릭하면 배치가 잘 작동하지만 내 C# 프로그램을 통해서만 실패합니다. – Shannow

관련 문제