2011-02-22 6 views
3

私は、現在query.exe(c:\ Windows \ system32 \ query.exe)を使用してWindowsにログインしているユーザーを特定するperlスクリプトを作成しようとしています。Perlで保護されたWindows 7実行ファイルを呼び出す

07/13/2009 05:16 PM   1,363,456 Query.dll 
1 File(s)  1,363,456 bytes 
0 Dir(s) 183,987,658,752 bytes free 

print `dir c:\\windows\\system32\\query*`; 

これは次の出力を生成します。私は次のコードで見つけたとしてPerlは、それが存在していることを見ることさえできない、それを実行することができない、このファイルにアクセスすることができません

私は、perlのgetlogin関数を使ってスクリプトを実行しているユーザーをチェックし、ローカルのAdministratorsグループのメンバー(具体的には私)の名前を返します。また、 "Everyone"の読み取り/実行権限を追加しようとしましたが、Windowsはこのファイルのアクセス権を変更しようとするとアクセス拒否エラーを表示し続けます。最後に、私は管理者としてperl.exeを実行しようとしましたが、それでも問題は解決されません。

Windowsの設定を変更して解決できるのですか?私はperlスクリプトに何かを追加する必要がありますか?あるいは、これらのプロセスのいくつかにperlアクセスを許可する方法はありませんか?

答えて

8

私の64ビットマシンでははWindows\System32(64ビットシステムディレクトリ)にありますが、Windows\SysWOW64(32ビットシステムディレクトリ)にはありません。

あなたは64ビットWindowsと32ビットPerlを実行していると思われます.WOW64エミュレーションでは、32ビットPerlプロセスはsystem32からSysWOW64にリダイレクトします。

あなたのパスにはsystem32が含まれているはずですから、query.exeをパスなしで実行すると実行できるはずです。絶対に64ビットのシステムフォルダを参照する必要がある場合は、C:\Windows\sysnativeで32ビットプロセスから行うことができます。

私の疑惑が正しければ、あなたがそれを上に上げるまでかなり混乱するかもしれないので、WOW64で読んでみることをお勧めします。一方、もしあなたがすでにそれについてすべて知っているなら、私はひいきになることをお詫びします。

+0

これはまったく元気ではなかったので、本当に役に立ちました。あなたは私のセットアップについて正しいですが、system32は私のパスにありますが、クエリコマンドはまだ私のスクリプトにアクセスできませんでした。 C:\ Windows \ sysnativeを使用すると完全に動作しました。ありがとう! – Jake

+0

@Jakeアップデートをロールバックしました。 64ビットマシンでは、system32は64ビットのフォルダ、SySWOW64は32ビットのフォルダです。私は分かりません!あなたの32ビットPerlプロセスでは、system32は実際にSysWOW64にリダイレクトされます。なぜなら、sysnativeを探す必要がある理由です。 –

+0

@ David-Heffernan Man、それはあまりにも意味があります。再度、感謝します :) – Jake