CGI-BBS > ウィンドウズ > CGI/SSI > CGI/SSIについてカレントディレクトリを変更したい。


カレッヂ
カレッヂ


質問者 南場  投稿日 10/18(金) 21:00:45
windows 2000 server(英語版)
IIS5.0の環境です。

SSIでdirectoryを変更しようとおもい(カレントディレクトリは%SystemRoot%\system32ですね)
<!--#exec cmd="cd .."-->
としたら
Failed to execute cript 'cd ..' Win32 Code=2となり
エラーとなってしまいます。これは、どうしたらよいのでしょうか。

また、一行に2つの実行コマンドを書くにはどうしたらよいでしょうか。
例えば
<!--#exec cmd='cd ..;dir"-->(これはもちろんエラーとなりますが)
のようにです?

御存じの方は教えていただけないでしょうか。




プロバイダ参照:
サーバのOS:WINサーバ
パソコンのOS:WinNT系
エディタ:vi
FTPソフト:
サーバ移転:していない
改造:していない
CGI習熟度:beginner

回答者 まさ  [削除]  投稿日 10/19(土) 20:00:42
IISでSSIを許可していますか?

詳しくは、http://localhost/iisHelp/ のIIS5.0 DocumentationのIndexタブで
「#EXEC」および「SSIEnableCmdDerective」の項を参照してください。

複数のコマンドを実行させたければ、BATファイルにすればいいです。
IISはデフォルトではBATファイルが使用できないので、これもIISの設定で使用可に
変更しておいて下さい。

質問者 南場  [削除]  投稿日 10/21(月) 13:43:00
まさ 様
アドバイスありがとうございます。

SSIEnableCmdDerectiveの設定はしてあります。

IBATファイルも、IISの設定で使用可にしてあります。
(これは、.bat を c:\WINNT\system32 /C %s %s と関連つければよいのですよね)

この関連づけのオプション /C %s %sがよく分かりませんが。

WINDOWS COMMAND 例えば dirなどは問題ないのですが、cd .. cd c:\tmpなど一部が
うまくいきません。

また、バッチファイル(test.bat)のなかに、自分のプログラム a.exe (これは、単に1〜100
までを表示するもの)は、なんの結果もだしません(エラーもだない)。
(test.bat)
@echo off
c:\tmp\cgi-bin\a.exe
echo SSI-TEST-3

コマンドプロンプトで
>test.batとすれば、
1. 2. 3. .........................100.

SSI-TEST-3
と全く問題ないのですが、
<!-- #exec cmd="c:\tmp\cgi-bin\test.bat"-->
としても、a.exeのところは全くなにもしません(結果をださない)。

もし、おわかりになったらアドバイス宜しくお願いいたします。

南場
質問者 南場  [削除]  投稿日 10/21(月) 14:39:18
まさ 様
アドバイスありがとうございます。

SSIEnableCmdDerectiveの設定はしてあります。

IBATファイルも、IISの設定で使用可にしてあります。
(これは、.bat を c:\WINNT\system32 /C %s %s と関連つければよいのですよね)

この関連づけのオプション /C %s %sがよく分かりませんが。

WINDOWS COMMAND 例えば dirなどは問題ないのですが、cd .. cd c:\tmpなど一部が
うまくいきません。

また、バッチファイル(test.bat)のなかに、自分のプログラム a.exe (これは、単に1〜100
までを表示するもの)は、なんの結果もだしません(エラーもでない)。
(test.bat)
@echo off
c:\tmp\cgi-bin\a.exe
echo SSI-TEST-3

コマンドプロンプトで
>test.batとすれば、
1. 2. 3. .........................100.
SSI-TEST-3

と全く問題ないのですが、
<!-- #exec cmd="c:\tmp\cgi-bin\test.bat"-->
としても、a.exeのところは全くなにもしません(結果をださない)。

もし、おわかりになったらアドバイス宜しくお願いいたします。

南場
回答者 まさ  [削除]  投稿日 10/21(月) 17:23:24
#exec cgiは動作するのでしょうか?

バッチを直接起動せず、a.exeを起動すればどうなりますか?
<!-- #exec cmd="c:\tmp\cgi-bin\a.exe"-->

また、
<!-- #exec cgi="c:\tmp\cgi-bin\a.exe"-->
はどうでしょう?

a.exeはCで書いているのでしょうか?
いずれにせよ、#exec cgiではa.exeの中にヘッダーが要ります。

試してみてください。

質問者 南場  [削除]  投稿日 10/21(月) 19:41:39
まさ 様

アドバイスいただきまことにありがとうございます。
 
<!-- #exec cmd="c:\tmp\cgi-bin\a.exe" -->

のほうは、きちんと結果をだします。
つまり、1〜100までの出力と
echoでくる、SSI−TEST−3という出力です。

cmdをcgiにかえた

<!-- #exec cgi="c:\tmp\cgi-bin\a.exe" -->
は、CGi TIME OUTとなってしまいます。
(こちらのほうは、パスをcgi-bin/a.exeとかくほうがいいのでしょうか?)

a.exeはfortranでかいていて

1     dimension a(100)
2     do 1 =1,100
3     a(i)=float(i)
4   1 continue
5     write(*,*) "Content-type: text/plain\\n\\n"
6     write(*,*)
7     stop
8     end

まさ様がいっておられるヘーダーというのは5行目のことですか?
このあたりが、ポイントとなると考え、ヘーダー付け加えましたが、結果は全く同じで
なにも出力しません。

もし何かアドバイスいただければ大変たすかります。

南場
回答者 まさ  [削除]  投稿日 10/21(月) 20:02:48
><!-- #exec cgi="c:\tmp\cgi-bin\a.exe" -->
>は、CGi TIME OUTとなってしまいます。
>(こちらのほうは、パスをcgi-bin/a.exeとかくほうがいいのでしょうか?)

\でいいですよ。

>a.exeはfortranでかいていて

>1     dimension a(100)
>2     do 1 =1,100
>3     a(i)=float(i)
>4   1 continue
>5     write(*,*) "Content-type: text/plain\\n\\n"
>6     write(*,*)
>7     stop
>8     end

>まさ様がいっておられるヘーダーというのは5行目のことですか?

そうですね。それがヘッダーですが、これだとループ回数分出力しません?
ヘッダーはループの前に書いておきましょう。

#exec cgiは動かない。
#exec cmdでは動く。
しかし#exec cmdをバッチすると動かない。

恐らくこれらは全てIISの設定で起こっていると思います。
設定はご自分で行ったのですか?
もう一度設定を見直す必要がありますね。
IISでの設定等は書物、サイト等数多くありますので、これらを参考にしてみては
どうでしょう。

こちらでも何かわかりましたら、また連絡します。



質問者 南場  [削除]  投稿日 10/21(月) 21:11:40
まさ 様

アドバイスありがとうございます。
IISの設定はすべて私がやっております。

ループの件については、まったくループしない(1回のループ)実行プログラムでやってみましたが、
やはりa.exeの結果は出力されませんでした。

bat ファイルの子プロセスが結果を表示しないということで、

CreateProseeWithNewConsole
REG_DWORD 
1
としてもやはり子プロセスは表示されませんでした。

お手数をおかけしますが、まさ様のPCでは、Cや他のプログラム言語で書いた子プロセス
はきちんと実行できますか?

御指導宜しくお願いいたします。

南場
回答者 まさ  [削除]  投稿日 10/21(月) 21:28:21
わたしはIISの5.0は知らなくて、実際設定したのはWindowsNTServer+IIS4.0です。
IIS5.0は4.0とあまりかわらないと思うのですが、詳しいところはわかりません。

わたしがIIS4.0で設定した限りでは、SSIは難なく動いていました。
もちろんBATも。

何故上手く動かないのかはわからないですが、SSIEnableCmdDerectiveの設定とBAT
の設定を行っていたら動くようなものなのですがね。

設定はそんなに難しくなかったと記憶しています。
何故動かないのでしょう?

2000が英語版と言うのが少し気になるのですが、これは恐らく気のせいでしょう。
これ以上具体的にアドバイスできなくて申し訳ないです。

質問者 南場  [削除]  投稿日 10/23(水) 21:20:32
まさ 様

いろいろありがとうございます。
解決いたしました。
adsutil set w3svc/CreateCGIWithNewConsole "1"
でできました。

regeditで編集していたのですが、働いていないようです。
また、IIS5では、iishelpでしらべたところ、CreateProcessWithNewConsoleはないようですが?
こちらにばかり気をとられていて。

とにかく有難うございました。

南場
回答者 まさ  [削除]  投稿日 10/23(水) 22:30:36
iishelpにないですか?
あれはWindows2000+IIS5.0でのヘルプなのですがね。今度確認してみます。
いずれにせようまくいってよかったですね。

ただこれはわたしの個人的な考えなのですが、IISを使うメリットはASPやSQLとの連携
だと思います。もしこれらを全く使わずに、PerlやC等でのCGIのみを使うのであれば
IISを使わずにApacheを使った方がいいと思ういます。以前IISのUNIX版を出すとか言う
話しを聞きましたが、まだ実現されていませんし、IISはWindows固有のHTTPdですよね。
Apacheは多くのUNIX,WindowsのHTTPdで広く使われています。こちらの技術を身に付ける
方がいいと思うのですが。

まあ、あくまでこれはわたしの私見ですので気になさらずに。。。

質問者 南場  [削除]  投稿日 10/24(木) 10:01:12
まさ 様

アドバイス誠にありがとうございます。

わたくしもApacheを使いたいのですが、関わっているGISのプロジェクトがIISを使っていて
変更できない事情があります。
GISの側がグラフィックが弱く、私のほうがサポートするかたちで、不器用なかなちに
なってしまいました。


ありがとうございます。

南場

返信(回答)する


Web裏技