Pregunta

CreateProcess () devuelve falso cuando la línea de comandos contiene un path.I no entienden por qué.

Aquí simplifica la operación:

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.

El resultado es falso.

¿Cómo ruta de inclusión en la línea de comandos?

¿Fue útil?

Solución

Si usted dio alguna información de depuración, tales como los valores de ParamStr (0) y Path, creo que iba a encontrar su propia respuesta. Creo que el error está aquí: ParamStr (0) + ExtractFilePath (ParamStr (0))

Así que si su aplicación es c: \ apps \ foo.exe entonces usted va a ser efectivamente llamar: ExecProcess ( 'c: \ apps \ foo.exec: \ aplicaciones \');

No creo que eso es lo que quería. Sin embargo, no se dice lo que está haciendo, por lo que es difícil saber con certeza ....

Otros consejos

Cada vez que tengo problemas con las rutas, es bien

  1. La ruta tiene espacios en él y tiene que ajustarse entre comillas
  2. Las barras invertidas en el camino están siendo tratados como caracteres de escape y tiene que ser doblado '\'

Como se mencionó Chris, que está concatenando los dos valores (sin espacio entre ellos) en una cadena larga. Desde 'c: \ apps \ foo.exec: \ apps \' probablemente no es bastante lo que pretende, probablemente no debería estar haciendo eso.

Además, si alguno de los caminos contienen espacios, puede ser necesario añadir comillas dobles. Delphi tiene una función en SysUtils sólo para ese 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;

Tenga en cuenta que mediante la asignación de los dos valores de las variables de cadena, el elenco PChar no suele ser necesaria, ya que el compilador implícitamente manejarlo para usted.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top