考虑以下命令行参数
"alfa" "beta" "4"
当我为我正在工作的项目指定 Run>Parameters... 时,应用程序在 Process Explorer 上显示为命令行:
"c:\myapp\myapp.exe" "alfa" "beta" "4"
ParamCount 显示 4 个参数。但是,当我从启动器应用程序(进行访问控制)启动相同的可执行文件时,Process Explorer 显示:
"alfa" "beta" "4"
ParamCount 显示 3 个参数。命令行是从启动器应用程序中提取的。理论上它会起作用,因为从启动器启动时,应用程序可以完美地工作。从 IDE 启动时,它会尝试在"4"
上面执行 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 是可执行路径。为什么会发生这种情况?
注意:我已经设计了如何将命令行参数解释更改为对于这种极端情况是稳健的——这里的重点是为什么会发生这种情况。