2012-07-29 56 views
38

Tôi có thể biết sự khác nhau giữa mỗi Exec, ExecWait, ExecShell, nsExec::Exec, nsExec::ExecToLog,nsExec::ExecToStack, ExecDosExecCmd là gì , như khi nào nên sử dụng?Exec vs ExecWait vs ExecShell vs nsExec :: Exec vs nsExec :: ExecToLog vs nsExec :: ExecToStack vs ExecDos vs ExeCmd

Tôi đã đăng các cuộc gọi thực hiện khác nhau mà tôi biết. Tôi cố gắng để tạo ra một danh sách toàn diện, do đó nó giúp du khách trong tương lai ..

  1. Exec: Rõ ràng thực hiện chuỗi gọi là, có thể là một số ứng dụng, giao diện điều khiển hoặc tập tin.

  2. ExecWait: Thực hiện như Exec nhưng đợi cho đến khi quá trình thoát.

  3. ExecShell: Nó dùng để làm gì?

  4. nsExec::Exec: Cũng giống như Exec hoặc ExecWait nhưng chỉ cho dấu nhắc lệnh và quá mà không mở cửa sổ bảng điều khiển. Tôi không chắc liệu nó có chờ quá trình thoát hay không. nsExec::Exec có chờ quá trình con để thoát không?

  5. nsExec::ExecToLog: The documentation says ExecToLog tương tự như đồng bằng nsExec nhưng nó xuất ra cửa sổ nhật ký. Điều đó có nghĩa là gì, cửa sổ nhật ký là gì?

  6. nsExec::ExecToStack: Tài liệu nói ExecToStack tương tự như đồng bằng nsExec nhưng nó đẩy đầu ra vào ngăn xếp. Tôi hiểu rồi.

  7. ExecDos: Tương tự như nsExec::ExecToStack nhưng nó bổ sung

    một (Há chẳng phải?). lấy tham số chuỗi phục vụ như stdin cho chạy ứng dụng.

    b. hoạt động ở cả chế độ đồng bộ/không đồng bộ.

    c. nó hoạt động ngoài mục - đối với kiểm tra .onInit.

  8. ExecCmd: Tương tự như ExecDos nhưng nó không đòi hỏi những

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

    phần. Tôi có đúng không?

+1

Bạn có thể bao gồm [Timeout :: ExecTimeout] (http://nsis.sourceforge.net/ExecTimeout_plug-in) cũng vậy, đối với những người cần phải giết quá trình con nếu mất quá nhiều thời gian để hoàn thành. –

+0

@FranciscoR Vui lòng chỉnh sửa câu hỏi và thêm câu hỏi (cùng với mục đích của nó). Tôi không hiểu biết về người bạn đã đề cập đến. – nawfal

+0

Thực tế, các giải thích cho những gì mỗi lệnh nên làm thuộc về một câu trả lời, _not_ trong câu hỏi chính nó. "Tôi có đúng không?" = câu hỏi StackOverflow xấu. Tôi bị cám dỗ để di chuyển các bit đó vào một câu trả lời, nhưng đã có một câu trả lời rằng việc di chuyển sẽ vô hiệu. –

Trả lời

36

1) 2) 3)

ExecExecWait sử dụng CreateProcess nội bộ và chỉ có thể bắt đầu các chương trình và các tập tin batch.

ExecShell sử dụng ShellExecute có nghĩa là nó cũng có thể khởi chạy mọi loại tệp đã đăng ký (.txt .chm etc) và URL.Nó cũng nên được sử dụng nếu chương trình bạn đang bắt đầu cần nâng cao với UAC.

4)

nsExec chuyển hướng stdout do đó, một cửa sổ giao diện điều khiển không nhìn thấy được khi quá trình con thực hiện. Và có, nó chờ đợi.

5)

Cửa sổ đăng nhập trên trang instfiles.

7)

Vâng, cả hai ExecDos và ExecCmd là phiên bản tiên tiến hơn của nsExec.

8)

Đúng

2

ExecWait chờ đợi và do đó có thể trở thứ! docs.

ExecShell cũng có thể ẩn cửa sổ đầu ra. docs

ExecCmd được coi là lỗi thời và được thay thế bởi ExecDos. cả hai đều là bổ sung cho NSIS không được vận chuyển theo mặc định. docs