Вопрос

CreateProcess () Возвращает 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.

Результат неверный.

Как мне включить путь в командной строке?

Это было полезно?

Решение

Если вы дали информацию о отладке, такие как значения Paramstr (0) и пути, я думаю, что вы найдете свой собственный ответ. Я думаю, что ошибка здесь: Paramstr (0) + ExtractFilePath (Paramstr (0))

Так что, если ваше приложение C: Apps foo.exe, вы будете эффективно вызывать: ExectProcess ('C: Apps Foo.exec: Apps ');

Я не думаю, что это то, что вы хотели. Тем не менее, вы не говорите, что вы делаете, так что трудно точно знать ....

Другие советы

Всякий раз, когда у меня проблемы с путями, это либо

  1. Путь имеет пробелы в нем и нужно завернуть в цитаты
  2. Вершинные каса на пути рассматриваются как escape персонажей и должны быть удвоимыми ''

Как упоминалось Крис, вы объединяете два значения (без пробела между ними) в одну длинную строку. Поскольку `c: apps foo.e.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 RAST обычно не требуется, так как компилятор неявно обрабатывает его для вас.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top