Question

CreateProcess () retourne false lorsque la ligne de commande contient un path.I ne comprends pas pourquoi.

Ici, je simplifié l'opération:

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.

Le résultat est faux.

Comment puis-je inclure chemin dans commandline?

Était-ce utile?

La solution

Si vous avez donné quelques informations de débogage telles que les valeurs de ParamStr (0) et le chemin, je pense que vous pouvez trouver votre propre réponse. Je pense que l'erreur est ici: ParamStr (0) + ExtractFilePath (ParamStr (0))

Donc, si votre application est c: \ apps \ foo.exe alors vous allez être appeler efficacement: ExecProcess ( 'c: \ apps \ foo.exec: \ apps \');

Je ne pense pas que ce soit ce que vous vouliez. Cependant, vous ne dites pas ce que vous faites, il est donc difficile de savoir pour sûr ....

Autres conseils

Chaque fois que je rencontre des problèmes avec des chemins, il est soit

  1. Le chemin comporte des espaces et doit être entre guillemets doubles
  2. Les anti-slash dans le chemin sont traités comme des caractères d'échappement et doivent être doublés \ '

Comme mentionné Chris, vous concaténer les deux valeurs (sans espace entre eux) dans une longue chaîne. Depuis `c: \ apps \ foo.exec: \ apps \ » est sans doute pas tout à fait ce que vous vouliez, vous ne devriez probablement pas faire ça.

En outre, si l'une des chemins contiennent des espaces, vous devrez peut-être ajouter des guillemets doubles. Delphi a une fonction dans SysUtils juste à cette fin:

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;

Notez que les deux en attribuant des valeurs aux variables de chaîne, la distribution PChar est généralement pas nécessaire, car le compilateur traitera implicitement pour vous.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top