nsis shellexecute

nsis - Exec vs ExecWait vs ExecShell vs nsExec:: Exec vs nsExec:: ExecToLog vs.



shellexecute (2)

ExecWait espera y por lo tanto puede devolver cosas! docs

ExecShell también puede 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 de forma predeterminada. docs

¿Puedo saber cuáles son las diferencias entre cada Exec , ExecWait , ExecShell , nsExec::Exec , nsExec::ExecToLog, nsExec::ExecToStack , ExecDos y ExecCmd , como cuándo usar?

He publicado las diversas llamadas de ejecución que conozco. Estoy tratando de hacer una lista completa, para que ayude a los futuros visitantes ..

  1. Exec : Ejecutar de forma sencilla la cadena llamada, ya sea alguna aplicación, consola o archivo.

  2. ExecWait : se ejecuta como Exec pero espera hasta que ExecWait el proceso.

  3. ExecShell : ¿ ExecShell qué es?

  4. nsExec::Exec : Al igual que Exec o ExecWait pero solo para el símbolo del sistema y también sin abrir la ventana de la consola. No estoy seguro si espera que el proceso salga. ¿ nsExec::Exec espera a que se nsExec::Exec el proceso hijo?

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

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

  7. ExecDos : igual que nsExec::ExecToStack pero además ( ¿no es así ?)

    a. toma el parámetro de cadena que sirve como entrada estándar para ejecutar la aplicación.

    segundo. Funciona en ambos modos de sincronización / asíncrono.

    do. funciona fuera de la sección - para .onit check out.

  8. ExecCmd : igual que ExecDos pero no requiere estos

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

    partes. ¿Estoy en lo correcto?


1) 2) 3)

Exec y ExecWait usan CreateProcess internamente y solo pueden iniciar programas y archivos por lotes.

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

4)

nsExec redirige stdout por lo que una ventana de consola no es visible cuando se ejecuta el proceso hijo. Y sí, espera.

5)

La ventana de registro en la página de instfiles.

7)

Sí, tanto ExecDos como ExecCmd son versiones más avanzadas de nsExec.

8)

Correcto