CGI-BBS > CGI > Perl > CGIから、外部コマンドを実行する方法


カレッヂ
カレッヂ


質問者 高橋  投稿日 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裏技