• 締切済み

CGI向けにpathの追加

こんにちは。 Windowsマシンにapacheを入れて、C++で作ったCGIを動かそうとしています。 このCGIがDLLを必要とするのですが、DLLにパスが通っていないため、実行されません。スタティックリンクにできればよいのですが、あいにくとDLLしか用意されていません。 こんな場合、通常であれば、 ・.exeと同じ場所にdllを置く ・System32等にdllをコピー ・環境変数PathにDLLがあるディレクトリを追加 という方法があると思うのですが、DLLをCGIと同じ外部から見える場所におくのは抵抗がありますし、なるべくOS本体の設定に手を加えたくありません。 .htaccessかhttpd.confあたりの設定で動かすことができればと思うのですが、なにかうまい方法はないものでしょうか。

みんなの回答

回答No.2

SetEnvディレクティブはApache内部の環境変数をセットするものです。 CGIアプリはApacheとは別のアカウント、別のプロセスで動く独立したアプリケーションですので、 (標準入力、標準出力がApache経由でクライアントとの通信にマッピングされていますが) Apacheの環境変数を変えてもCGIアプリケーションの環境変数が変わることはありません。 > ディレクトリごとにpath等を設定できないものかと。 それはCGIではなく、Windowsアプリ、C/C++アプリの範疇ですね。 実行時に動的に、PATHを変更する方法があるかどうかじゃないでしょうか。 getenv()、setenv()でPATHを変えてみてはいかがでしょうか?

titokani
質問者

補足

>Apacheの環境変数を変えてもCGIアプリケーションの環境変数が変わることはありません。 う~ん、そうなのでしょうか。 適当な環境変数にSetEnvで値を指定して、CGI側でgetenvしてみると、その値が読み出されるのですが。 >実行時に動的に、PATHを変更する方法があるかどうかじゃないでしょうか。 今回のDLLは暗黙リンクですので、DLLがロードできない場合はプロセスも起動しないので、この方法は使えないんです。 LoadLibraryを使えばできるでしょうが、exeにも手を加えたくないので。 やっぱり無理なのでしょうか。 それにしてもSetEnvディレクティブの挙動が謎です。

回答No.1

.htaccessもhttpd.confもApacheの設定であって、CGIアプリケーションの設定ではありません。 CGIの実行ユーザーのpathに登録してあれば、動くんじゃないでしょうか。 検索してみたところ、このページがわかりやすそうです。 http://pocketstudio.jp/win/xp/path.html

titokani
質問者

補足

回答ありがとうございます。 >.htaccessもhttpd.confもApacheの設定であって、CGIアプリケーションの設定ではありません。 ええ、ですからapacheの設定でもって、pathを設定できないものかと、 SetEnvディレクティブで環境変数の設定はできるようですが、なぜかpathは設定できず・・・なぜ? >CGIの実行ユーザーのpathに登録してあれば、動くんじゃないでしょうか。 はい、それでも動くとは思うのですが、ディレクトリごとにpath等を設定できないものかと。やっぱりできないのでしょうか。

関連するQ&A