1

Windowsでdefragコマンドを実行する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ファイルをテストすると失敗します。これはWindows2003で正常に機能しますが、Windows 2008で機能しなくなった理由を誰かが知っていますか?

ありがとう!

クリス

更新:バックスラッシュは元々エスケープされていませんでした。修理済み。

4

3 に答える 3

1

バックスラッシュが実際のディレクトリ区切り文字として認識されるようにするには、バックスラッシュをエスケープする必要があります。

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

動作するはずです。

于 2011-08-15T20:36:33.887 に答える
0

を使用しようとして、この問題が発生しましたpsexecおそらくSystemFileRedirectorに見舞われているでしょう。これは、C:\ Windows \ System32ディレクトリを64ビットプログラム専用に予約することと関係があり、32ビットプログラムは64ビットプログラムを実行できなくなりますが、C:\ Windows\SysWow64ディレクトリにリダイレクトされます。

それはあなたのためのマイクロソフトです:64ビットプログラムはC:\ Windows \ System32に保存され、32ビットプログラムはC:\ Windows\SysWow64に保存されます。

Perl 5.12でこの問題を解決できると思いますが、プログラムをC:\ Windows\System32ディレクトリから別のディレクトリにコピーするだけで問題を回避できました。

于 2011-08-16T02:02:24.930 に答える
0

新しいバージョンのWindows(Windows Server 2008が含まれる場合と含まれない場合があります)は、他の方法で指示するマニフェストでビルドされなかった実行可能ファイルの特定のシステムディレクトリを仮想化します。

5.12.0以降、Perlはこの命令で構築されています。

perl.exeには、WindowsVista以降のtrustInfo設定を指定するためのマニフェストリソースが含まれるようになりました。この設定がないと、Windowsはperl.exeをレガシーアプリケーションとして扱い、適切な「許可が拒否されました」エラーを生成する代わりに、保護されたファイルシステム領域(「ProgramFiles」フォルダーなど)へのアクセスをユーザー「VirtualStore」にリダイレクトするなどのさまざまなヒューリスティックを適用します。 。
于 2011-08-15T21:52:03.150 に答える