Làm thế nào để chạy một tiến trình trong nền mà không giữ một tệp bó mở?


9

Tôi có một dịch vụ Windows (máy chủ tích hợp Tre) chạy tệp bó dưới dạng một quy trình con (công việc xây dựng) của tập lệnh đó. Trong tệp bó đó, tôi muốn có thể bắt đầu một quy trình (hãy gọi nó là worker process.exe) và để quá trình đó chạy trong nền. Đây là tất cả tốt, tôi đã sử dụng:

start "title" /B workerprocess.exe

Đó là tất cả tốt và tốt. Vấn đề là điều này sau đó giữ hoàn thành công việc xây dựng. Vì vậy, tập lệnh bó kết thúc, nhưng do quy trình con worker process.exe, dịch vụ (Tre) không biết rằng nó đã kết thúc: nó vẫn chờ (và hiển thị đầu ra từ) worker process.exe.

Tôi đã xem tài liệu về lệnh bắt đầu và tôi không thể thấy bất cứ điều gì tôi muốn. Tôi đã thấy câu hỏi này nhưng nó cũng không thực sự giúp ích - dịch vụ vẫn kết thúc chờ quá trình kết thúc.

Vì vậy, tôi đoán tóm tắt: làm thế nào tôi có thể chạy một quy trình mới từ tập lệnh bó để nó hoàn toàn tách rời và sẽ không giữ bất cứ điều gì xảy ra để chờ tập lệnh bó đó hoàn thành.


1
Bạn đã thử nó mà không có tham số "/ B" để nó không bắt đầu quá trình trong cùng một cửa sổ lệnh chưa?
Josh

@JoshR, điều đó đã thay đổi. Dịch vụ không còn nhận được đầu ra từ quá trình, nhưng vẫn bị chặn bởi nó.
Jack Scott

Câu trả lời:


2

Bạn đã thử Hidden Start (HSTART) chưa? (Chi phí $ 20)

Tôi sử dụng nó cá nhân để chạy một công việc hàng giờ với cửa sổ ẩn. Họ cũng đề cập rằng bạn có thể chạy các lệnh tuần tự như một tham số (hoặc theo mặc định, tôi giả sử) chạy không đồng bộ. Tôi không biết điều này sẽ ảnh hưởng đến sự tranh chấp của bạn trên CPU, bộ nhớ hoặc đĩa ... nhưng phần mềm cũng cung cấp cho bạn tùy chọn chờ một thời gian trước khi thực hiện hành động.


Khi tôi viết câu trả lời của mình vào tháng 9 năm 2013, sản phẩm đã miễn phí xung quanh. Đáng buồn thay họ đang tính giá.
CN

3

Tất cả các tập lệnh được liên kết có thể được tải xuống và lưu với bất kỳ tên nào bạn thấy thuận tiện.

1) Giải pháp IEXPRESS - vì các đối số chỉ chấp nhận lệnh và các đối số của nó.

Ví dụ sử dụng:

call hidder.bat myBat.bat  myexe.exe
call myexe.exe

2) SCHTASKS - Một lần nữa chỉ chấp nhận hai đối số - lệnh và đối số. Ngoài ra, hãy kiểm tra xem liệu nó có bắt đầu với quyền nâng cao hay không và nếu có thể có được quy trình PID với lệnh WEVTUTIL.

Ví dụ sử dụng:

call SCHPhidden.bat "cmd /c myBat.bat"  "argument"

3) 'WScript.Shell' - tập lệnh là trình bao bọc đầy đủ của 'WScript.Shell' và mọi tùy chọn có thể có thể được đặt thông qua các tùy chọn dòng lệnh. Đây là một kết hợp jscript / batch và có thể được gọi là bat.

Sử dụng ví dụ (để biết thêm thông tin in trợ giúp với '-h'):

call ShellRunJS.bat "notepad.exe" -style 0 -wait no 

4) 'Win32_ProcessStartup' - một lần nữa trình bao bọc đầy đủ và tất cả các tùy chọn đều có thể truy cập được thông qua các đối số dòng lệnh. Lần này, WSF / batch lai với một số đoạn mã Jscript và một số đoạn mã VBScript - nhưng nó trả về PID của quá trình bắt đầu. không ẩn một số tùy chọn như tọa độ X / Y có thể được sử dụng.

Sử dụng ví dụ (để biết thêm thông tin in trợ giúp với '-h'). Điều này sẽ yêu cầu đường dẫn đầy đủ đến tệp thực thi / tập lệnh nếu nó không nằm trong %path%:

call win32process.bat "notepad" -arguments "/A openFile.txt"  -showWindow 0 -title "notepad"

5) Cái. Giải pháp NET . Hầu hết các tùy chọn của tùy chọn ProcessStartInfo được sử dụng (nhưng cuối cùng tôi đã quá mệt mỏi để bao gồm mọi thứ):

Sử dụng ví dụ (để biết thêm thông tin in trợ giúp với '-h'):

call ProcessStartJS.bat "notepad" -arguments "/A openFile.txt"  -style Hidden -directory "." -title "notepad" -priority Normal

Liên kết không được tìm thấy
Rahil Wazir

@rahilwazir - Đã chỉnh sửa.
npocmaka

1
Tôi đã thử những điều này một chút - tôi nghĩ rằng các chi tiết cần phải được làm sạch một thỏa thuận TUYỆT VỜI. Đơn giản chỉ cần nhìn vào cách tiếp cận đầu tiên: IE े, liên kết là để ẩn. Ví dụ trên sử dụng một cái gì đó khác. Khi tôi chạy tập lệnh, nó đã thất bại khi yêu cầu tôi cho một EXE không được đề cập ở trên. Điều đó có thể ổn nếu có markdown trên github, nhưng không có. Cuối cùng, việc chạy nó đã tạo ra một số tệp .DDF, nhưng không có gì khác ....
JoeG
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.