2012-07-29 11 views
38

posso sapere quali sono le differenze tra ogni Exec, ExecWait, ExecShell, nsExec::Exec, nsExec::ExecToLog,nsExec::ExecToStack, ExecDos e ExecCmd , come in quando usare quale?Exec vs ExecWait vs ExecShell vs nsExec :: Exec vs nsExec :: ExecToLog vs nsExec :: ExecToStack vs ExecDos vs ExeCmd

Ho postato le varie chiamate in esecuzione che conosco. Sto cercando di fare una lista completa, in modo che aiuta i futuri visitatori ..

  1. Exec: Chiaramente eseguire la chiamata di stringa, sia esso una certa applicazione, console o file.

  2. ExecWait: Esegue come Exec ma attende fino all'esaurimento del processo.

  3. ExecShell: A cosa serve?

  4. nsExec::Exec: Proprio come Exec o ExecWait ma solo per prompt dei comandi e che anche senza aprire la finestra della console. Non sono sicuro se aspetta l'uscita del processo. nsExec::Exec attende l'uscita del processo figlio?

  5. nsExec::ExecToLog: The documentation says ExecToLog è simile al normale nsExec ma emette la finestra di Login. Che cosa significa, che cos'è una finestra di registro?

  6. nsExec::ExecToStack: La documentazione dice ExecToStack è simile a semplice nsExec ma spinge uscita per impilare. Ho capito.

  7. ExecDos: come nsExec::ExecToStack ma in aggiunta

    un (Non è?). accetta un parametro stringa che funge da stdin per l'esecuzione dell'applicazione.

    b. funziona sia in modalità sync/async.

    c. funziona fuori sezione - per. In caso di check out.

  8. ExecCmd: come ExecDos ma non richiede questi

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

    parti. Sono corretto?

+1

È possibile includere anche [Timeout :: ExecTimeout] (http://nsis.sourceforge.net/ExecTimeout_plug-in) per coloro che hanno bisogno di interrompere il processo figlio se il completamento richiede troppo tempo. –

+0

@FranciscoR Sentiti libero di modificare la domanda e aggiungerla (insieme al suo scopo). Non sono così esperto su quello che hai menzionato. – nawfal

+0

Realisticamente, le spiegazioni di ciò che ciascun comando dovrebbe fare appartengono a una risposta, _non_ nella domanda stessa. "Ho ragione?" = domanda di StackOverflow errata. Sono tentato di spostare quei bit per una risposta, ma c'è già una risposta che lo spostamento sarebbe invalidare. –

risposta

36

1) 2) 3)

Exec e ExecWait uso CreateProcess internamente e può iniziare solo i programmi e file batch.

ExecShell utilizza ShellExecute che significa che può anche avviare qualsiasi tipo di file registrato (.txt .chm ecc.) E URL.Dovrebbe anche essere usato se il programma che stai iniziando deve elevarsi con il controllo dell'account utente.

4)

nsExec reindirizza stdout così una finestra di console non è visibile quando il processo figlio esegue. E sì, aspetta.

5)

La finestra di log sulla pagina instfiles.

7)

Sì, entrambi ExecDos e ExecCmd sono versioni più avanzate di nsExec.

8)

Correggere

2

ExecWait attese e quindi in grado di ritorno roba! docs.

ExecShell è inoltre in grado di nascondere la finestra di output. docs

ExecCmd è considerato obsoleto e sostituito da ExecDos. entrambi sono plugin aggiuntivi per NSIS che non vengono spediti per impostazione predefinita. docs