2012-07-29 403 views
38

我能知道什麼是每個ExecExecWaitExecShellnsExec::ExecnsExec::ExecToLog,nsExec::ExecToStackExecDosExecCmd之間的差異,在何時使用哪個?Exec的VS ExecWait VS ExecShell VS nsExec :: Exec的VS nsExec :: ExecToLog VS nsExec :: ExecToStack VS ExecDos VS ExeCmd

我發佈了我知道的各種執行調用。我試圖做一個全面的列表,因此,它有助於未來的遊客..

  1. Exec:說白了執行所謂的字符串,是它的一些應用程序,控制檯或文件。

  2. ExecWait:執行像Exec,但等待直到過程退出。

  3. ExecShell這是什麼?

  4. nsExec::Exec:就像ExecExecWait但僅限於命令提示符,太不打開控制檯窗口。我不確定它是否等待流程退出。 nsExec::Exec等待子進程退出嗎?

  5. nsExec::ExecToLogThe documentation says ExecToLog類似於普通nsExec但它輸出到記錄窗口。 這是什麼意思,什麼是日誌窗口?

  6. nsExec::ExecToStack:文檔說ExecToStack類似於普通nsExec但它推動輸出到疊加。我明白了。

  7. ExecDos:同nsExec::ExecToStack但另外

    一個(這不是?)。採用字符串參數作爲運行應用程序的標準輸入。

    b。在同步/異步模式下工作。

    c。它不適用於.onInit簽出。

  8. ExecCmd:同ExecDos但它並不需要這些

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

    部分。 我正確嗎?

+1

對於需要殺死子進程的用戶,如果需要花費很長時間才能完成,您可能還會包含[Timeout :: ExecTimeout](http://nsis.sourceforge.net/ExecTimeout_plug-in)。 – 2013-10-24 17:28:00

+0

@FranciscoR隨意編輯問題並添加它(連同其目的)。我對你提到的那個不太瞭解。 – nawfal 2013-10-24 18:06:43

+0

實際上,每個命令應該做什麼的解釋都屬於答案,而不是問題本身。 「我對麼?」 =糟糕的StackOverflow問題。我試圖將這些小部分移到答案上,但已經有一個答案,即移動會失效。 – 2014-05-07 00:09:04

回答

36

1)2)3)

ExecExecWait使用CreateProcess內部和只能啓動程序和批處理文件。

ExecShell使用ShellExecute這意味着它也可以啓動任何註冊的文件類型(.txt .chm等)和URL。如果您開始的課程需要通過UAC升級,也應該使用它。

4)

nsExec重定向標準輸出,以便子進程執行時在控制檯窗口中是不可見的。是的,它等待。

5)

的instfiles頁面上的日誌窗口。

7)

是的,無論是ExecDos和ExecCmd是nsExec更爲先進的版本。

8)

正確

2

ExecWait等待,因此可以回報的東西! docs

ExecShell也能夠隱藏輸出窗口docs

ExecCmd被認爲已過時並被ExecDos所取代。兩者都是NSIS的額外插件,默認情況下不會發貨。 docs

相關問題