2011-08-15 5 views
1

Windows에서 defrag 명령을 실행하는 perl 스크립트를 실행하고 싶습니다. 난 그냥Windows 2008의 perl 스크립트에서 조각 모음을 호출 할 수 없습니다.

system("defrag C:"); 

를 사용하려고하면 나는 "내부 또는 외부 명령, 실행할 수있는 프로그램, 또는 배치 파일이 아닙니다 '조각 모음'을"얻을. C : \ Windows \ System32 \ defrag.exe의 전체 경로를 제공하더라도 동일한 오류가 발생합니다. 또한 defrag.exe의 존재에 대한 테스트가 실패합니다. 예 :

if(-f "C:\\Windows\\System32\\defrag.exe"), 

if(-x "C:\\Windows\\System32\\defrag.exe"), and 

if(-e "C:\\Windows\\System32\\defrag.exe") 

모두 실패합니다. 사실 그들은 .exe 파일을 테스트 할 때 실패합니다. 이것은 Windows 2003에서 잘 작동하지만, Windows 2008에서 더 이상 작동하지 않는 이유를 알고 있습니까?

감사합니다.

크리스

업데이트는 : 백 슬래시는 원래 탈출하지 않았다. 결정된.

+0

힌트 : Perl 스크립트에서 해당 항목에 슬래시를 사용할 수 있습니다. 즉, if (-f "C : /Windows/System32/defrag.exe")라고 말할 수 있습니다. 'C :/Windows/SysWow64/defrag.exe'를 시도하십시오. –

답변

0

Windows의 최신 버전 (Windows Server 2008을 포함 할 수도 있고 포함하지 않을 수도 있음)은 다르게 지시하는 매니페스트로 빌드되지 않은 실행 파일의 특정 시스템 디렉토리를 가상화합니다.

5.12.0 이래로 Perl은이 명령어로 작성됩니다.

perl.exe now includes a manifest resource to specify the trustInfo settings for Windows Vista and later. Without this setting Windows would treat perl.exe as a legacy application and apply various heuristics like redirecting access to protected file system areas (like the "Program Files" folder) to the users "VirtualStore" instead of generating a proper "permission denied" error.
1

당신은 그들을 실제 디렉토리 분리로 인식하는 순서로 백 슬래시를 이스케이프해야합니다 :

if(-f "C:\\Windows\\System32\\defrag.exe") 

작동합니다.

+0

실례합니다. 나는 실제로 코드에서 그것들을 벗어나, 내 게시물을 타이핑 할 때 그것을 잊어 버렸다. 업데이트로 Defrag.exe를 Windows \ System32에서 수동으로 복사하면 스크립트에서 실행할 수 있습니다. 프로그래밍 방식으로 복사 할 수는 없지만 사용 권한 문제 일 수 있습니다. – Chris

0

방금 ​​psexec을 사용해 보았습니다. 아마 SystemFile Redirector에 의해 타격을 입을 것입니다. 그것은 64 비트 프로그램에 대해서만 C : \ Windows \ System32 디렉터리를 예약하는 것과 관련이 있으며 32 비트 프로그램은 더 이상 64 비트 프로그램을 실행할 수 없지만 C : \ Windows \ SysWow64 디렉터리로 리디렉션됩니다.

그것은 Microsoft입니다. 64 비트 프로그램은 C : \ Windows \ System32에 저장되고 32 비트 프로그램은 C : \ Windows \ SysWow64에 저장됩니다.

필자는 Perl 5.12가이 문제를 해결한다고 생각하지만 C : \ Windows \ System32 디렉터리에서 다른 디렉터리로 프로그램을 단순히 복사하여 해결했습니다.

+0

Perl 5.12가 작동했습니다. 파일을 복사하면 "리소스 로더 캐시에 MUI 항목이로드되지 않았습니다."라는 오류 메시지가 나타납니다. 그 의미와 googleling이 Norton을 많이 언급했는지는 모르겠지만 그것이 원인이라고 생각하지는 않습니다. – Chris

+0

실현 나는 위의 코멘트에서 복사가 가능하다고 말했다. 나는 그것이 동료의 2008 상자에 있음을 분명히해야합니다. 내 상자는 파일을 복사 할 때 오류를 발생 시켰으므로 일관성을 위해 Perl 5.12를 해결책으로 사용하겠습니다. – Chris

관련 문제