著作一覧 |
GetModuleFileName(う、忘れた)というようなAPIを利用すると、自分の位置がとれる。まあ、int main(int arc, char* argv[])を持っていれば、argv[0]でも運が良ければ位置がわかるけど、APIを使うほうが良い。
ところが、何を勘違いしたのか、次のような設定を環境変数に要求するプログラムに出会った。仮にFOOBAR.exeとする。
FOOBARPATH=C: PATH=%FOOBARPATH%\FooBar\Bin;%FOOBARPATH%\FooBar\Data;%FOOBARPATH%\FooBar\Ini;%PATH%
最初のはパスじゃなくて、ドライブレター+:を設定する必要があるという時点ですでに名前がおかしいのだが、なぜPATHにBinはとmかく、DataだのIniだのを設定しなきゃならんのだ?
というわけで、セットアップマニュアルを書いたやつが何か間違えたんだろうと好意的に解釈して、あっさり無視したら、怒る怒る。NT EventLogにDataディレクトリが見つからないと吐きまくり。
むむ、じゃあ、これならどうだとバッチファイルを作る。
@echo off set FOOBARPATH=C: set PATH=%FOOBARPATH%\FooBar\Bin;%FOOBARPATH%\FooBar\Data;%FOOBARPATH%\FooBar\Ini;%PATH% FooBar.exe
しばらくはうまく動くが、ある局面からいきなりイベントログにDataディレクトリが見つからないと吐きまくり。forkしてるようには見えないのだが、バッチファイルに設定した環境変数って引き継がれないのかな? (と、書いていて気付いたがシステム環境変数とユーザー環境変数の区別があるから、システム環境変数を参照してるのかも。で、バッチのはユーザー環境変数になるとかなのかな)。
と、敗北感を味わいながら、詳細設定でシステム環境変数にPATHを設定。
で、順調に動作するようになったが、声を大に言いたい。PATHは、実行ファイルをシェルが検索するための環境変数だ。データディレクトリを記述するための場所じゃない。
というか、どういう見方をしてるんだろう? システム環境変数のPATHを読み取って、最後がFooBar\DataやFooBar\Iniという名前のディレクトリを抽出してるんだろうか? でも、それって、binの兄弟ということにしておけば、自分の位置に対して..\Dataとかすればよいのだから、おかしいだろう。
という具合に、久し振り(1990年代前半ころまではDOSや16ビットWindowsで見ないこともなかった)に、システム環境の意味を無視したオレ様ワールドを堪能した。
はー、王様の耳はロバの耳。
ジェズイットを見習え |