次のコマンドライン引数を考慮する
"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 は実行可能パスです。なぜこれが起こるのですか?
注:コマンドライン引数の解釈を変更して、このエッジケースに対して堅牢にする方法をすでに考案しました。ここでのポイントは、これが発生する理由です。