2

次のコマンドライン引数を考慮する

"alfa" "beta" "4"

作業中のプロジェクトに Run>Parameters... を指定すると、アプリケーションは Process Explorer にコマンドラインとして表示されます。

"c:\myapp\myapp.exe" "alfa" "beta" "4"

そして、ParamCount は 4 つのパラメーターを示します。しかし、(アクセス制御を行う) ランチャー アプリケーションから同じ実行可能ファイルを起動すると、Process Explorer に次のように表示されます。

"alfa" "beta" "4"

ParamCount は 3 つのパラメーターを表示します。コマンドラインは、ランチャー アプリケーションから抽出されました。ランチャーから起動すると、アプリケーションは問題なく動作するため、理論的には機能します。"4"IDE から起動すると、上記でStrToInt を実行しようとしますが、"beta"代わりにパラメーターのみを取得します。

ランチャー アプリケーションのサンプル コード:

var
  StartupInfo: TSTARTUPINFO;
  ProcessInfo: PROCESS_INFORMATION;
  CurrentDirPath: String;
begin
  Result := 0;
  ZeroMemory(@StartupInfo, SizeOf(StartupInfo));
  StartupInfo.cb := SizeOf(StartupInfo);
  DirCorrente := ExtractFilePath(sExe);

  if CreateProcess(PChar(sExe), PChar(sParam), nil, nil, true,
    NORMAL_PRIORITY_CLASS, nil, PChar(CurrentDirPath),
    StartupInfo, ProcessInfo) then

sParam の内容は上記のコマンドライン引数で、sExe は実行可能パスです。なぜこれが起こるのですか?

:コマンドライン引数の解釈を変更して、このエッジケースに対して堅牢にする方法をすでに考案しました。ここでのポイントは、これが発生する理由です。

4

2 に答える 2