如何包括的路径在commandline?
-
24-09-2019 - |
题
CreateProcess()returns false时命令行中包含的道路。我不明白为什么。
在这里,我简化操作:
function ExecProcess(path:string):boolean;
var StartupInfo:TstartupInfo;
ProcInfo:TProcessInformation;
begin
FillChar( StartupInfo, SizeOf( TStartupInfo ), 0 );
StartupInfo.cb := SizeOf( TStartupInfo );
Result:= CreateProcess(nil, PChar(path), Nil, Nil, False, 0, Nil, PChar(ExtractFilePath(path)),StartupInfo,ProcInfo);
end;
begin
ExecProcess(ParamStr(0) + ExtractFilePath(ParamStr(0)));
end.
结果是假的。
我怎包括路径在commandline?
解决方案
如果你给了一些调试信息,如ParamStr这(0)和路径的价值观,我想你会找到自己的答案。 我认为错误是在这里: ParamStr这(0)+ ExtractFilePath(ParamStr这(0))
所以,如果您的应用程序是c:\ APPS \ foo.exe的 那么你会得到有效呼叫: ExecProcess( 'C:\应用\ foo.exec:\应用\');
我不认为这是你想要的。但是,你不说你在做什么,所以很难确切知道....
其他提示
每当我有问题的路径,它是
- 路径具有空间在和它需要被包裹在报价
- 反斜杠,在路径是正在处理像逃字,并需要加倍'\'
由于克里斯提到,你是串联的两个值(它们之间没有空格)成一个长字符串。由于`C:\ APPS \ foo.exec:\ APPS \”可能不是你打算什么比较,你可能不应该这样做。
此外,如果任一路径包含空格,你可能需要添加双引号。 Delphi有在只是用于该目的sysutils的一个函数:
var
AppPath, ExePath: string
begin
// Setup StartupInfo and ProcInfo as before. Omitted for brevity here.
ExePath := AnsiQuotedStr(ParamStr(0), '"');
AppPath := AnsiQuotedStr(ExtractFilePath(ExePath), '"');
Result:= CreateProcess(nil, ExePath, Nil, Nil, False, 0,
Nil, Apppath, StartupInfo, ProcInfo);
end;
请注意,通过这两个值分配给字符串变量,该PChar类型投通常是不必要的,因为编译器将隐为您处理。
不隶属于 StackOverflow