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:\应用\');

我不认为这是你想要的。但是,你不说你在做什么,所以很难确切知道....

其他提示

每当我有问题的路径,它是

  1. 路径具有空间在和它需要被包裹在报价
  2. 反斜杠,在路径是正在处理像逃字,并需要加倍'\'

由于克里斯提到,你是串联的两个值(它们之间没有空格)成一个长字符串。由于`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类型投通常是不必要的,因为编译器将隐为您处理。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top