PageID:IIS_CGI
Last update:00.3.2
Perl初心者の部屋
また、IIS関連の不具合関連、トラブルシューティング情報が下記URLで検索できます。
http://www.microsoft.com/search/worldwide/japan/support/default.asp
●参考サイト
お薦めのサイトがあれば教えてください。
・Answers to Microsoft Webserver Problems [
http://www.geocities.com/SiliconValley/Park/8312/perlis.htm(英文)
Q1.
よく分からないのですが、IISではCGIは、なにも設定せず、動きました。
/cgi-bin/等何か、設定する必要があるのでしょうか?
Q2.
NTPerlを使いたいのですが、コマンドプロンプトからは動くのに、URLからは、
CGIエラー
指定せれたCGIアプリケーションは、HTTPヘッダーを 一部しか返していません。
返させたヘッダーは:
という状態になってしまいます。
callするCGI
@ECHO OFF
C:\IIS\scripts\perl\perl.exe C:\IIS\scripts\test.pl
test.plは、
print "Content-type: text/plain\n\n";
print "test";
です。
Q3.マニュアルか何かの文献において、Perlプログラムの 呼び出しは、例えば http://xxx.xxx.xxx/cgi-bin/xxx.pl? の様に行うとありました。 そこで、IE3.0でこの様なリンクを張ると正常に動作するのですが Netscapeで同じことをすると呼び出せません。
Q4.今回perlでCGIスクリプトを作成しましたが、 簡単なものでさえ上手くいきません。何故かファイルのセーブを行ってしまいます。 コマンドラインからはうまくいっています。
Q5.IISで関連付けを.pl=perlIS.dllとすると、ネットスケープの ブラウザではうまく出力できまくなりました。 何かおかしいのでしょうか。
Q6.perl を使用し form から受けたデータを パイプ経由でmail で送信しようとしているのですが、うまくいきません。 どうしてでしょうか。
Q7. マイクロソフトのIISでSSIをやろうとしているのですが、 全然機能しません。どうしてでしょうか?
Q8. WindowsNT Workstation+PWSでWWWを構築しているのですが、 Perl-NT_CGIページにあるように、test.batをExplolerから実行すると、 DOS窓が一瞬開いてすぐに消えてしまうだけです。 どうしてでしょうか?
Q9. UNIXでは、バックコートを使うことで変数にコマンドの 実行結果が格納されますが、Windows NT4.0 + IIS/PWS4.0 を使ったCGIだとうまくいきません。 コマンドラインからだと問題なく出力されます。 どうすれば可能になるのでしょうか?
test.pl #!C:\Perl\bin\perl.exe print "Content-type: text/plain\n\n"; $tmp1 = `cmd /c date /t`; print "command date \$tmp1-> $tmp1"; $tmp2 = `date /t`; print "command date \$tmp2-> $tmp2";
Q10. ブラウザから入力した名前を、CGIで処理してブラウザに 表示する簡単なCGIスクリプトを実行しようとしているのですが、 ソースがそのままテキスト形式でブラウザに表示されます。 どうすればいいのでしょうか?
Q11. NT+IIS/PWS上で、 CGI_Liteモジュールを使ったファイルアップロードがうまくいきません。
症状
ファイルを選んで送信ボタンを押すと、
黙り込んでそのうち「インターネット サイトupload.plを開けません。
処理がタイムアウトになりました」と出る。
一向にアップロード処理が終わらない。
エラーになる。
イメージファイルが壊れる。
Q12.CGIプログラムで、
rename $tempfile, $targetfile or die "rename NG:$!";
のようなrename文の箇所があるのですが、この部分で
CGI エラー 指定された CGI アプリケーションは、HTTP ヘッダーを一部しか返していません。返されたヘッダーは: rename NG:Permission denied at C:\InetSrv\scripts\guestbook.cgi line 85.というエラーメッセージが出ることがあります。時々うまく いくこともあるのですが、どうしてでしょうか?
WWWサーバはIIS3.0で、PerlはPerl for Win32ビルド316です。また、$tempfileや$targetfileには適切な書き込み権限を設定してあります。
Q14. 次のような、CGIスクリプトを作り実行したところ、 カレントディレクトリには.txtファイルがあるにもかかわらず、 何も出力されませんでした。
●フルパスでディレクトリを指定する。('C:/dir/*.txt' 等)
●globの前にchdirでカレントディレクトリを「対象ディレクトリ」に変更する。
等になるでしょう。
対応策としては、
●フルパスでjcode.plを指定する。('C:/cgi-directory/jcode.pl' 等)
●requireの前にchdirでカレントディレクトリをjcode.plのあるディレクトリに変更する。
●jcode.plを@INCにセットしてあるライブラリディレクトリに置く。
●requireの前に、use lib 'TARGET-DIRECTRY';で、jcode.plを置いているディレクトリを@INCに含める。
等が考えられます。
rename $tempfile, $targetfile or die "rename NG:$!";
のようなrename文の箇所があるのですが、この部分で
CGI エラー 指定された CGI アプリケーションは、HTTP ヘッダーを一部しか返していません。返されたヘッダーは: rename NG:Permission denied at C:\InetSrv\scripts\guestbook.cgi line 85.というエラーメッセージが出ることがあります。時々うまく いくこともあるのですが、どうしてでしょうか?
WWWサーバはIIS3.0で、PerlはPerl for Win32ビルド316です。また、$tempfileや$targetfileには適切な書き込み権限を設定してあります。
A.12
IIS3.0/4.0で、AS版のPerl for Win32ビルド316あるいはGS版を使ってrenameを使ったCGIを実行した場合、上記のエラーが発生する報告が何件か出ています。対策としては、
use File::Copy; ・・・ copy($tempfile,$targetfile); unlink $tempfile or die "unlink NG:$!";等があります。
症状
ファイルを選んで送信ボタンを押すと、
黙り込んでそのうち「インターネット サイトxxを開けません。
処理がタイムアウトになりました」等のメッセージ出る。
一向にアップロード処理が終わらない。
エラーになる。(Oh, Oh! I'm upset! Can't read what I want.等)
イメージファイルが壊れる。 A.11 サーバがNT + IIS/PWSやApacheだとうまく動作しないようです。
IIS/PWS3.0だとPosting Acceptorが必要です。Posting Acceptorは、Microsoft Site Server, Enterprise Edition等の一部となっていますが、通常のNTだとPosting Acceptorを追加インストールする必要があります。
Posting Acceptor1.0の入手先:
http://www.microsoft.com/msdownload/webpubwiz/postacc/01000.htm
http://www.microsoft.com/windows/software/webpost/post_accept.htm
注意事項
http://www.microsoft.com/mscorp/worldwide/japan/support/kb/articles/j030/9/91.htm
Posting Acceptor1.01は、Microsoft Site Serverに含まれています。 Microsoft Site Server Express(MSSE)2.0が NT4.0のオプションパックに含まれているため、MSSEをインストールすればいいのですが、 自動インストールではNT serverにしかインストールできないようになっています。 しかし、Posting Acceptor1.01はNT workstation4.0でも稼働可能なので、 オプションパックCD-ROMの
Posting Acceptorをインストール後、
− インターネットマネージャーを使って、アップロード先の仮想ディレクトリ(URL)を書き込み可能にしておきます。
− NTのユーザ認証が行われますので、同じくインターネット
マネージャーを使って認証がパスするように設定しておきます。
− ブラウザからアップロード用のURLを指定してアップロードの動作確認します。
なお、CGIでなくても、IIS/PWSのASP機能を使ったアップロードも可能です。方法は、次のようになります。
上記の設定終了後、クライアントのブラウザから
http://SERVER-NAME/scripts/Uploadn.asp
を指定すると、<input type="file" .....>を使用したアップロード用の
ページが表示されます。これで、ファイルアップロードができるはずです。
使用上の問題としては、
使用上の問題は、次の記事を参考にさせて頂きました。
http://www.geocities.co.jp/SiliconValley/9840/fileup.html
他にSA-FileUpというシェアウェアがあり、これを入れる手もあります。 ちょっと高いのが難点。
http://www.nt.users.gr.jp/asp/tips/0011.asp
http://www.linkcom.co.jp/sa_faq.htm
他に、Upload3.0というものもあるそうです。
[CGIスクリプト側での対策]
CGI_Lite.pmの470行目当たりに
binmode STDIN;
を追加します。さらに、open文が2カ所あるので、それぞれの文の直後に
binmode $handle;
を挿入すると、とりあえず動くようになりました。
binmode STDIN;の追加だけでも、テキストファイルやBMPファイルはOKなのですが、JPEGやGIF等だとファイルサイズが大きくなって崩れてしまいます。
この他代替策として、cgi-lib.plを使い、cgi-lib.pl内部の$cgi_lib'writefilesにアップロードディレクトリをセットして、&ReadParseを実行してアップロード処理する方法があります。
$cgi_lib'writefiles = "c:/inetpub/wwwroot/upload";
これはアップロード自体は問題なくできますが、Posting Acceptorを導入していないと、やはりJPEGやGIF等だとうまくいかないようです。また、ファイル名は、デフォルトでは
$cgi_lib'filepre = "cgi-lib";
で指定した名前の下に、プロセス番号と処理中のシリアル番号がつくようになっています。アップロードするファイルの名前にしたい場合修正が必要です。
また、標準モジュールであるCGI.pmを使うこともできます。
http://www.t3.rim.or.jp/~hirose31/docs/upf.html
なお、イメージファイルやMS-Word等のバイナリーファイルをアップロードする場合、 CGIスクリプト中で適切なContent-Type: をセットする必要があることに注意してください。
その他、適切な処理の仕方をご存じでしたら、ご一報頂けるとありがたいです。
プロキシサーバのリダイレクト(プロキシサーバにアクセスしてから、 WWWサーバにアクセスしている場合)も同じようなエラーが出るようです。 この場合は、ブラウザをno proxyにセットします。
関連記事
http://www.microsoft.com/mscorp/worldwide/japan/support/kb/articles/j042/5/45.htm
http://www.big.or.jp/~talk/t-club/soft/wwwboard/messages/153.html
http://www.tsden.org/ryutaroh/fileupload-j.shtml
CGI対象の拡張子が登録されていない。
CGI対象のディレクトリのアクセス権に実行権をセットしていない。
等があるようです。
設定方法については、
PerlのCGIデバッグ環境の構築:MS-IIS/PWS4.0編
を参考にして下さい。
$tmpfile = "c:\\temp\\tmp.txt";
system("date /t > $tmpfile");
print "Content-type: text/html\n\n";
print "<html><body>";
print "<PRE>";
open(TEMP,$tmpfile);
while(<TEMP>){
s/>/</g;
s/>/>/g;
}
close(TEMP);
print "</PRE>";
print "</html></body>";
unlink($tmpfile);
exit;
オプションパックでは、以下の方法があるようです。
[perl-win32-j ML & Takahiro Shibataさんに感謝]
>cd \WINNT\system32\inetsv\adminsamples
注)レジストリ等の編集の結果、万が一問題が発生しても著者は責任を負いません。自己責任で実施してください。
Internet Information Server(IIS)3.0以前のバージョンでは、
\\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W3SVC\Parameters
に、REG_DWORDでCreateProcessWithNewConsoleを作成し、値を1にセットしていましたが、これは4.0では無効になっています。
ちなみに、<!-- #exec cmd="perl xxx.pl" -->を可能にするには、 regedt32/regeditを起動して、レジストリ
regedt32の場合、編集 -> 値の追加 をクリックして、値の名前 に SSIEnableCmdDerectiveを記入し、データ型はREG_DWORDを選択します。DWORDエディタが現れるので、データ(D)に1を入力します。基数は何でもかまいません。
regeditの場合、編集 -> 新規 -> DWORD値をクリックすると、右のウィンドウに新しい値が生成されるので、名前をSSIEnableCmdDerectiveとします。その名前の位置で左クリックして現れるメニューから変更を選択します。DWORD値の変更ウィンドウが出てくるので、値のデータ欄に1を入力します。ベースはどちらでも構いません。
注)レジストリの編集の結果、万が一問題が発生しても著者は責任を負いません。自己責任で実施してください。
注)MSはセキュリティ上問題があると考えて、デフォルトを禁止状態に しているものと思われます。 CGIスクリプトを起動したいだけであれば、デフォルトで使用可能な <!-- #exec cgi="xxx.cgi" -->を利用されることを推奨致します。
なお、4.0以降のIIS/PWSで、SSIの#execを無効にする方法については、 http://www.microsoft.com/JAPAN/support/kb/articles/J049/1/77.htm に記述されていました。
古いバージョンについては、上記の
「The Microsoft IIS FAQの和訳」
1.6) サーバサイドインクルード(SSI)をサポートしていますか
を参照して下さい。
http://www.t3.rim.or.jp/~nog/pcpage/iisj.html#1.6
"; print "buffer=$buffer"; print "
"; print "your submit has been completed !\n"; $mailprog = "sendmail -t 'nobody'" ; open(MAILER,"|$mailprog") || print "Cannot write to the data file!"; #標準エラーはブラウザには渡されないため、標準出力にprint print(MAILER "From : nobody\r\n"); print(MAILER "To : administrator\r\n"); print(MAILER "Subject : test\r\n"); print MAILER $buffer; close(MAILER); ---end test.pl---
Perl スクリプトの中で標準的なプログラム I/O が使用できない
http://www.microsoft.com/JAPAN/support/kb/articles/J028/6/96.htm
具体的には、 「親スクリプトから生まれる(spawned) 別のperlスクリプトや 外部コマンドから/ あるいはそれらへ引数やデータを受け渡すという、 標準的なプログラムI/Oメソッドが使えない」というものです。
原因は、「CGIアプリケーションからスクリプトや外部コマンドを 起動(spawn)した場合、それは別プロセスとして生成されます。 デフォルトでは、MS-IIS2.0はコンソールを生成せず、プロセス間の 標準I/Oのリダイレクションをサポートしません。」ということです。
対策としては、レジストリのキーを編集します。 しかし、間違うとシステムが潰れる可能性もありますので、リスクを承知で 自分の責任において実施しなければなりません。また、 「各々の CGIスクリプトに対して新しいコンソールを生成すると重大な パフォーマンス上の問題に巻き込まれる可能性があり、 より遅いパフォーマンスが受け入れられない限り実施すべきではありません」 という注意書きがでています。
変更するのはHKEY_LOCAL_MACHINEサブツリーのサブキー:
\SYSTEM\CurrentControlSet\Services\W3SVC\Parametersの
値の名前: CreateProcessWithNewConsole
データ タイプ: REG_DWORD
データ:1
詳細は上記のmicrosoft の Knowledge Base のURLをご覧下さい。
。
この項は小森園 輝貴さんのご協力を頂きました。
ありがとうございました。
−−−−−引用ここから−−−−−− From: "Toshiyuki Kishii"Newsgroups: fj.os.windows-nt Subject: Re: IIS de CGI ga ugokanai Date: 12 Nov 1996 06:57:22 GMT Message-ID: <01bbd066$d0180fa0$9f01028c@pensck.tec.nsc.nikko.co.jp> 中村秀紀 wrote in article <5663rg$a29@jupiter.tokyo-gas.co.jp>... > これ、私も便乗質問したいのですが、私のほうはIISとPERL5 > を使用しているのですが、やはりヘッダ情報ががうまくわたりません。 > Content-type: XXXXXX/XXXと書いてもそれがそのまま表示されてしまい > ます。 > > PERL5ではPERLIIS.DLLというものを介してISAP > Iで情報をやりとりしているはずですが、サーバ側が悪いのか、このD > LLが悪いのかよくわからないんですよね。ISAPIを使ったテスト > プログラムを書いてみるのが良いのかもしれませんが、これは結構面倒 > くさいです。ちなみに根本的な解決策ではありませんが、ヘッダ情報を > 何もつけないようにすると、デフォルトでtext/htmlとして解釈するよう > で、とりあえずhtml文書はprintできるようになりました。(各タグの > 最後にいちいち改行コードを入れないとうまく動きませんでしたが) > NTのメーリングリストで私も同じ質問をしたのですが、 検証した結果は以下のようになりました。 1.IISのスクリプトの関連付けが,.pl=perlIS.dllのとき ・IE3.0J HTMLソースのみの出力で、正常表示 ・NetscapeNavigator3.0Gold HTMLソースのみの出力だと、ブラウザがapplication/x-perlの 関連付けを要求し、保存などを選択する必要あり、 保存内容は改行コードがx'0A'のみになる。 print "HTTP/1.0 200 OK\nContent-Type: text/html\n\n"; をHTMLソースのまえに出力することで正常表示 2.IISのスクリプトの関連付けが,.cgi(.pl以外)=perlIS.dllのとき ・IE3.0J HTMLソースのみの出力で、正常表示 ・NetscapeNavigator3.0Gold HTMLソースのみの出力で、正常表示 -- 岸井 利幸 kishii@tec.nsc.nikko.co.jp 日興システムセンター 通信システム課 Newsgroups: fj.os.windows-nt From: mishima@osa.sci.jri.co.jp (Masahiro Mishima) Subject: Re: IIS de CGI ga ugokanai Message-ID: Date: Tue, 12 Nov 1996 05:39:26 GMT In article <5663rg$a29@jupiter.tokyo-gas.co.jp> hidenori@iti.tokyo-gas.co.jp (=? ISO-2022-JP?B?GyRCQ2ZCPD0oNSobKEI=?= ) writes: これ、私も便乗質問したいのですが、私のほうはIISとPERL5 を使用しているのですが、やはりヘッダ情報ががうまくわたりません。 Content-type: XXXXXX/XXXと書いてもそれがそのまま表示されてしまい ます。 Content-Type の前に Status: 200 OK という1行をつけるとうまくいくようです。 IIS は PerlIS.DLL を実行するときに、ヘッダを全く出力しないようです。 ひょっとするとこれはいけないことで、ステータス行はサーバが出すべきもの なのかもしれません。 RFC1945 をじっくり読むとわかるかも...。 -- (株)日本総合研究所 インフォメーション・テクノロジ事業部 ドキュメント・エンジニアリング・グループ 三嶋 正弘 −−−−−引用ここまで−−−−−−
Q3.マニュアルか何かの文献において、Perlプログラムの
呼び出しは、例えば http://xxx.xxx.xxx/cgi-bin/xxx.pl?
の様に行うとありました。
そこで、IE3.0でこの様なリンクを張ると正常に動作するのですが
Netscapeで同じことをすると呼び出せません。
Q4.今回perlでCGIスクリプトを作成しましたが、
簡単なものでさえ上手くいきません。何故かファイルのセーブを行ってしまいます。
コマンドラインからはうまくいっています。
概要
マイクロソフト インターネット エクスプローラのような Web ブラウザから CGI アプリケーションを実行しようとする とき、ブラウザはサーバー上で実行しようとせずにその アプリケーションをダウンロードしようとする場合があります。
原因
IIS では CGI スクリプトの最後に "?" を付けてコールする必要があります。
回避方法 URL に疑問符を付けてコールしてください。
例:
"http://server/scripts/testcgi.exe"
下記のように変更します。
"http://server/scripts/testcgi.exe?"
A1.
IISなら、特に必要ないかと思います。
\scripts\下の領域が/cgi-bin/相当ということになっているようです。
#但し、下記警告にあるような危険があるので、 NTFSにしておいて、ACL(アクセス制御リスト)で管理者以外の人が
自由に書き込んだりできなくしておく必要があります。
Q2.
NTPerlを使いたいのですが、コマンドプロンプトからは動くのに、URLからは、
CGIエラー
指定せれたCGIアプリケーションは、HTTPヘッダーを 一部しか返していません。
返させたヘッダーは:
という状態になってしまいます。
callするCGI
@ECHO OFF
C:\IIS\scripts\perl\perl.exe C:\IIS\scripts\test.pl
test.plは、
print "Content-type: text/plain\n\n";
print "test";
です。
A2.
これはIISのバグです。microsoftのWWWの http://www.microsoft.com/kb/bussys/iis/q145661.htm
に出ています。
test.plにヘッダ情報を追加して
print "HTTP/1.0 200 OK\n";
print "Content-Type: text/html\n\n\n";
print "test";
としてやってみてください。
また、下記スクリプトでもやってみてください。
#Microsoftご推奨版。(^^;;
ファイル名は helloworld.pl とします。
print "Content-Type: text/html\n\n";
print "<HTML>\n";
print "<HEAD>\n";
print "<TITLE>Hello World</TITLE>\n";
print "</HEAD>\n";
print "<BODY>\n";
print "<H4>Hello World</H4>\n";
print "<P>\n";
print "Your IP Address is $ENV{REMOTE_ADDR}.\n";
print "<P>";
print "<H5>Have a nice day</H5>\n";
print "</BODY>\n";
print "</HTML>\n";
次にレジストリを変更します。
但し、これは at your own risk です。 下手にいじると重大な障害を引き起こすことがあります。
当方は結果については責任を負いませんので悪しからず。
1. Regedt32.exe を起動し、 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W3SVC\Parameters\ScriptMap
を開きます。
2. 編集メニューから新規作成(値)をクリックして選択します。
3. 値の名前は .pl とします。
4. データタイプは REG_SZ とします。
5. 文字列の値は <絶対パス>\perl.exe %s とします。
6. WWW サービスを再起動します。
これでブラウザからPerlスクリプトのテストができるはずです。 次のようなURLでやってみてください。
http://<サーバ名>/scripts/helloworld.pl?
出所: http://www.microsoft.com/kb/bussys/iis/q150629.htm
Configuring and Testing a PERL Script with IIS Article
ID: Q150629 Revision
Date: 24-JUL-1996
<警告>
3.1) CGIとは何ですか どこでその情報を得ることができますか
CGIとは common gateway interface のことです。 CGIに関してもっと情報がほしい場合は次のサイトで入手できます。 http://hoohoo.ncsa.uiuc.edu/cgi/overview.html. "Common Gateway Interface (CGI) はHTTP、Webサーバのような インフォメーションサーバと外部アプリケーションの標準インタフェースです。Webデーモンが送る生のHTML文書はスタティックなもので、これはテキストファイルが変更できない、いつも決まったものであることを意味しています。一方CGIプログラムはリアルタイムで実行されるので、ダイナミックな情報を出力できるのです。" (From http://hoohoo.ncsa.uiuc.edu/cgi/intro.html).
CGIアプリケーションはIISで実行できますが、IISはCGIよりも速い、 -- ISAPIインタフェースを持っています。
!3.2) WinCGIとは何ですか どこでその情報を得ることができますか
WinCGIはWindowsプログラマがよりWindowsライクなアプローチを使って -- つまり標準のWindows INIファイルを通して、CGIアプリケーションを書ける ようになっています。この仕様は次のサイトで入手可能です。 http://website.ora.com/wsdocs/32demo/windows-cgi.html VB/Accessを使ったWinCGIプログラムのサンプルを見たいときは次のサイトが よいでしょう。 http://website.ora.com/devcorner/db-src/index.html
3.3) CGIアプリを実行すると "403 - Forbidden Access"が起きてしまいます
Internet Information Serverマネージャで設定するディレクトリの アクセス権とファイルセキュリティのアクセス権を一致させる必要があります 。CGIアプリケーションを含むディレクトリに対して実行チェックボックスが チェックされている必要があります。 (David A.Baker <dave@canon.bhs.com>)
3.4) WinCGIの仕様で作られたVBアプリはIIS上で 使えますか
純粋なCGIとは何か、Bob DennyのWebSiteサーバで動作するもう一つの 一級品である"Windows CGI"とは何か、ということに多少の混乱が あるようです。IISは標準的なCGIをサポートしています。 Windows CGIはVBでWebサーバの機能を拡張するために開発されました。
SDKの中にあるIS2WCGIのサンプルを見てください。 見れば理解できるでしょう。これはWindows CGIアプリケーションをコールする ISAPIアプリケーションです。Windows CGIは深刻なスケーラビリティの問題を 抱えていますが、Webサイトを手早く拡張することのできる手段です。 OLEISAPIを調べることを薦めます。これもまたVBでWebサーバを拡張する手段で すが、Windows CGIで起きるようなプロセスの作成とファイルI/Oに関わる オーバヘッドがまったくありません。 (Lee Hart <leehart@exchange.microsoft.com>)
3.5) 16ビットVBアプリやDelphyのCGIアプリは IISで使えますか なぜIS2WCGIは動かないのですか
はい、使えます。開発者の方はIS2WCGI.DLLにはリビジョンがあることに 注意してください。このDLLは多くのサイトで上手に利用されています。 IS2WCGIはMS Internet SDKにあるDLLのひとつです。
ここにはIISからWinCGIアプリケーションを動かすための速くて汚いリストが あります。より詳しい情報は is2wcgi のソースコードを参照してください。
- Microsoft ActiveX SDKからIS2WCGI.DLLを取ってください。 もしMS C++を持っていない場合は次のサイトで入手してください。 http://rampages.onramp.net/~steveg/is2wcgi.dll.
- コントロールパネルを起動して"サービス"をダブルクリック してください。WWWパブリッシングサービスを選んでスタートボタンを クリックしてください。サービスが動作するように画面上でボタンを チェックしてください。
- /inetsrv/scripts ディレクトリに is2wcgi.dll をコピーしてください。
- is2wcgi.dllを .dll の拡張子を除いて WinCGI の exe ファイルと同じ ファイル名にリネームしてください。例えば FRMSRCH.EXE というWinCGI プログラムがあったとすると is2wcgi.dll を frmsrch.dll とリネームします。
- www.yoursite.com/scripts/frmsrch.dll のようにWinCGIをコールします。
3.6) CGIアプリを実行すると "access denied"が起きてしまいます
この問題はサービスマネージャで "実行" をマークしていない ディレクトリのスクリプトを実行しようとしているために起きていると 考えられます。そのスクリプトを /scripts ディレクトリに移動するか、 サービスマネージャでディレクトリの設定を変更してください。
バッチファイルを使う代わりにURLとして http://xxx.zzz/..../myscript.pl を使うことができます。 しかしこのためにはIISが .plファイルを認識するようにレジストリの変更が 必要です。:
次のキーに値を追加します。
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W3SVC\Parameters\ScriptMap私のマシンでは次のようにしています。 .pl=c:\perl5\perl.exe %s %s (Marius Milner <Marius.Milner@octel.com>)
−−−引用ここまで−−−セキュリティ上の理由によりサーバ上での .bat と .cmd ファイルの使用には強く反対します。たとえ .cmd/.bat のfixを行なったとしてもシェルスクリプトは危険なことに変わりはありません。(例えば、環境変数の表示はあなたへの攻撃を誘発させます) (JohnLudeman <johnl@microsoft.com>)
ご意見、ご要望、ご質問は、
電子メールまたは 質問に
お願い致します。