カレッヂ |
質問者 高橋
投稿日 5/25(金) 22:34:05
WindowsNTサーバ、IIS(Webサーバ)を利用して ブラウザ(IE)から、CGI(Perl)を実行しています。 CGIの途中で、DOSプログラムを起動したいのですが、 どのように記述すると、動作するかを 教えてください。 下記の記述では、エラーとなります。 system("notepad.exe", 'E:\test/sample.txt'); ただし、DOSプロンプトから実行した場合は、 期待どおりに、プログラムが起動します。 |
回答者 まさ
[削除]
投稿日 5/26(土) 10:01:41
system("notepad.exe", 'E:\test/sample.txt'); ここでnotepad.exeへのパスが通っていないだけでは。 フルパスで記述すれば動くと思います。 |
質問者 高橋
[削除]
投稿日 5/28(月) 22:52:04
アドバイス、ありがとうございます。 E:\testディレクトリのアクセス権を変更して インターネットゲストアカウントに対して「変更」を許可したところ、動きました。 system('copy E:\test\sample.txt E:\test\sample-b.txt'); system("del E:\\test\\sample-b.txt"); ただし、notepad.exeのようにウィンドウを開くコマンドは、動きませんでした。 system('E:\test\notepad.exe E:\test\sample.txt'); (notepad.exeのアクセス権に、インターネットゲストアカウントを追加するために、 テストディレクトリに、コピーして、実行) ウィンドウが出てくるものは、WEBからは、無理かなあと 納得?しています。 |
回答者 boy
[削除]
投稿日 6/4(月) 03:51:37
>ウィンドウが出てくるものは、WEBからは、無理かなあと 納得?しています。 これを読まれないかも知れませんが、やり方によっては可能ですよ。 私も同じ様な経験をした事がありますが、Apacheでは、Notepad.exe を起動できるのに、IISではうまく動いてくれない...様です? NT系(IIS)で問題となるのは、呼ばれるファイルのアクセス権と ファイルの呼び出し元が何か?だと思います。 IISは専用のゲストアカウントでロ−カルログオンします。 その為、IISから起動されるファイルは、IUSR_ComputerName、INTERACTIVE、 等のアクセス権がなければなりません。逆に、それらを与えない事で、 不要にプログラムが起動される事を防げます。 また、IISを経由しないで、コマンドプロンプトから実行すれば、 問題となるNotepad.exeは動きます。 以下は、本当に参考程度の物ですが、こんな方法もありますよ。 ちなみに、WEBサ−バ−経由で、コマンドラインを利用する事は、 慎重になさった方が良いと思います。 #///////////////////////////////////// # IIS経由で実行するスクリプト #///////////////////////////////////// $com_file = '/scripts/dos_com.pl'; if (!open(DAT,">$com_file")) { die "error\n";} print DAT "dos_command\n"; close(DAT); sleep(1); if (-e $com_file) { unlink($com_file);} print "Content-type: text/plain\n\n"; print "exit!\n"; exit; #///////////////////////////////////// # コマンドラインから実行するスクリプト #///////////////////////////////////// $com_file = '/scripts/dos_com.pl'; $limiter = 5; while($limiter > 0 ) { if (-e $com_file) { system('a:\scripts\notepad.exe', ''); $limiter--; } } exit; |
返信(回答)する
Web裏技 |