2012-07-29 26 views
38

puedo saber cuáles son las diferencias entre cada Exec, ExecWait, ExecShell, nsExec::Exec, nsExec::ExecToLog,nsExec::ExecToStack, ExecDos y ExecCmd , ¿en cuanto a cuándo usar qué?Exec vs vs ExecWait ExecShell vs nsExec :: Exec vs nsExec :: ExecToLog vs nsExec :: ExecToStack vs vs ExecDos ExeCmd

He publicado varias llamadas de ejecución que conozco. Estoy tratando de hacer una lista exhaustiva, por lo que ayuda a los futuros visitantes ..

  1. Exec: Claramente ejecutar la cadena de llamada, ya sea alguna aplicación, la consola o el archivo.

  2. ExecWait: Ejecuta como Exec pero espera hasta que el proceso finalice.

  3. ExecShell: ¿Para qué sirve?

  4. nsExec::Exec: Al igual que Exec o ExecWait pero sólo por símbolo del sistema y que también sin abrir la ventana de la consola. No estoy seguro de si espera la salida del proceso. ¿nsExec::Exec espera que el proceso secundario salga?

  5. nsExec::ExecToLog: The documentation says ExecToLog es similar a la llanura nsExec pero da salida a la ventana de registro. ¿Qué significa eso, qué es una ventana de registro?

  6. nsExec::ExecToStack: La documentación dice ExecToStack es similar a la llanura nsExec pero empuja a la pila de salida. Lo entiendo.

  7. ExecDos: Igual que nsExec::ExecToStack pero, además,

    un (¿No es?). toma el parámetro de cadena que sirve como stdin para ejecutar la aplicación.

    b. funciona en modo sincronizado/asíncrono.

    c. funciona fuera de sección - para .onInit check outs.

  8. ExecCmd: Igual que ExecDos pero no requiere que estos

    ExpandEnvStrings $3 %COMSPEC% 
    ExecDos::exec /C 
    

    partes. ¿Estoy en lo correcto?

+1

Puede incluir [Timeout :: ExecTimeout] (http://nsis.sourceforge.net/ExecTimeout_plug-in) también, para aquellos que necesiten matar el proceso secundario si tarda demasiado en completarse. –

+0

@FranciscoR Siéntase libre de editar la pregunta y agregarla (junto con su propósito). No estoy tan bien informado sobre el que mencionaste. – nawfal

+0

Realísticamente, las explicaciones de lo que debería hacer cada comando pertenecen a una respuesta, _no_ en la pregunta misma. "¿Estoy en lo correcto?" = mala pregunta de StackOverflow. Estoy tentado de mover esos bits a una respuesta, pero ya hay una respuesta que el movimiento invalidaría. –

Respuesta

36

1) 2) 3)

Exec y ExecWait uso CreateProcess internamente y sólo puede iniciar programas y archivos por lotes.

ExecShell usa ShellExecute lo que significa que también puede iniciar cualquier tipo de archivo registrado (.txt .chm, etc.) y URL.También se debe usar si el programa que está comenzando necesita elevarse con UAC.

4)

nsExec redirige la salida estándar por lo que una ventana de la consola no es visible cuando el proceso hijo ejecuta. Y sí, espera.

5)

La ventana de registro en la página instfiles.

7)

Sí, ambos ExecDos y ExecCmd son versiones más avanzadas de nsExec.

8)

Corregir

2

ExecWait espera y por lo tanto puede retorno cosas! docs.

ExecShell también es posible ocultar la ventana de salida. docs

ExecCmd se considera obsoleto y reemplazado por ExecDos. ambos son complementos adicionales para NSIS que no se envían por defecto. docs

Cuestiones relacionadas