実行ファイルの作成先情報を得るにはどうしますか?

解決


jiro  2017-11-02 16:50:57  No: 48840  IP: 192.*.*.*

CGIの制作に取り組んだいます。デバッグ環境からdllファイルに移すときにデータベースの作成位置を変えたいと思います。exeファイルと同じ場所に自動生成する仕様でしたがdllだとsystemフォルダに変わってしまうので、何か方法はないかと考えています。
コンパイラの実行ファイルの出力先を得る方法やそれをpathに変換する方法を教えていただけないでしょうか。

編集 削除
通りすがり  2017-11-02 17:52:48  No: 48841  IP: 192.*.*.*

質問はもっと具体的に

編集 削除
jiro  2017-11-03 10:02:26  No: 48842  IP: 192.*.*.*

データベースを利用したIIS DLLを作っています。
データベース位置はFDConecctionからDATA.FDBとして同じディレクトリに作成しています。これでデバッグ環境は整っています。
dllを作ると呼び出すWindowsのファイルがSYSTEMディレクトリにあるので”データベースの作成場所”が同じくSYSTEMディレクトリとなってしまいます。

そこでこの解消のためにIDEから(作成する)実行ファイルの出力先情報を抜き出して、.\$(Platform)の情報を具体的な相対パスに直し、プロパティに放り込んでやる、ということをしたいと思っています。

編集 削除
jiro  2017-11-03 10:20:03  No: 48843  IP: 192.*.*.*

自分で気づきましたがコンパイル時にはパスが決定しないのでこの案は否定ですね。
ParamStrなどで今日の間調べてみようと思います。

編集 削除
jiro  2017-11-03 10:57:26  No: 48844  IP: 192.*.*.*

無事解決いたしました
var
  t: string;


  if (ExtractFileName(ParamStr(0)) = '???.dll') and
    (FileExists(PbbsConnection.Params.Values['database']) = false) then
  begin
    t := ExtractFilePath(GetModuleName(HInstance)) + 'data.fdb';
    PbbsConnection.Params.Values['database'] := t;
  end;

このような例で実現できました。安全なコードかはまだわかりませんが解決といたします。

編集 削除
Mr.XRAY  2017-11-03 12:10:18  No: 48845  IP: 192.*.*.*

ご自分の世界に浸っていらっしゃるようですね.
書き込みの文章を読んでも,私には意味不明で支離滅裂な感じがします.
私にとってはエニグマ並みです.

艱難辛苦の末,私の現在の解読結果では,
もしかして,デバッグ (IDE からの実行) と EXE を直接起動した時とで処理を分岐したいのではと思っています.
私はチューリングのような頭脳はありませんので,このあたりが限界かと.

[827_デバッグ中の実行か EXE 実行かを判定]
http://mrxray.on.coocan.jp/Delphi/plSamples/827_IDEorEXE.htm

# エニグマ
# 第二次世界大戦中にドイツが使用していた暗号機,またはその暗号機で作成された暗号

編集 削除
Mr.XRAY  2017-11-04 15:18:05  No: 48846  IP: 192.*.*.*

> if (ExtractFileName(ParamStr(0)) = '???.dll') and 

ParamStr(0) で取得した文字列が DLL の時ってあるんですか.
どんな場合なんでしょう.私は経験したことないです.

編集 削除
Mr.XRAY  2017-11-04 15:20:17  No: 48847  IP: 192.*.*.*

>ParamStr(0) で取得した文字列が DLL の時ってあるんですか. 

文字列 --> パス名
のことです.

編集 削除
jiro  2017-11-04 18:18:16  No: 48848  IP: 192.*.*.*

WebBrokerでCGIを作っているところです。CGIは複雑なものはApacheかISAPIのDLLで作成するように書かれてありましたので、移行を行っていたところです。

編集 削除
通りすがり  2017-11-04 20:55:14  No: 48849  IP: 192.*.*.*

データベースファイルはC:\ProgramData\<vendorname>\<productname>とかに固定的においた方が
幸せになれるんじゃぁ?C:\ProgramDataの部分はTPath.GetPublicPathで取得ね。

編集 削除