Làm thế nào tôi có thể thực thi một dòng lệnh windows trong nền mà không tương tác với người dùng đang hoạt động?
Làm thế nào tôi có thể thực thi một dòng lệnh windows trong nền mà không tương tác với người dùng đang hoạt động?
Câu trả lời:
Câu hỏi của bạn khá mơ hồ, nhưng có một bài đăng trên ServerFault có thể chứa thông tin bạn cần. Câu trả lời ở đó mô tả cách chạy một cửa sổ tệp bó:
Thay vào đó, bạn có thể chạy nó một cách im lặng bằng tệp Windows Script. Phương thức Run cho phép bạn chạy một tập lệnh ở chế độ vô hình. Tạo một
.vbs
tệp như thế nàyDim WinScriptHost Set WinScriptHost = CreateObject("WScript.Shell") WinScriptHost.Run Chr(34) & "C:\Scheduled Jobs\mybat.bat" & Chr(34), 0 Set WinScriptHost = Nothing
và lên lịch cho nó Đối số thứ hai trong ví dụ này đặt kiểu cửa sổ. 0 có nghĩa là "ẩn cửa sổ."
Điều này hơi muộn nhưng tôi vừa chạy qua câu hỏi này trong khi tự mình tìm kiếm câu trả lời và tôi đã tìm thấy điều này:
START /B program
trong đó, trên Windows, là lệnh gần nhất với Linux:
program &
Từ hệ thống TRỢ GIÚP:
C:\>HELP START
Starts a separate window to run a specified program or command.
START ["title"] [/D path] [/I] [/MIN] [/MAX] [/SEPARATE | /SHARED]
[/LOW | /NORMAL | /HIGH | /REALTIME | /ABOVENORMAL | /BELOWNORMAL]
[/NODE <NUMA node>] [/AFFINITY <hex affinity mask>] [/WAIT] [/B]
[command/program] [parameters]
"title" Title to display in window title bar.
path Starting directory.
B Start application without creating a new window. The
application has ^C handling ignored. Unless the application
enables ^C processing, ^Break is the only way to interrupt
the application.
Một vấn đề tôi thấy với nó là bạn có nhiều hơn một chương trình ghi vào cửa sổ giao diện điều khiển, nó có một chút khó hiểu và lộn xộn.
Để làm cho nó không tương tác với người dùng, bạn có thể chuyển hướng đầu ra thành một tệp:
START /B program > somefile.txt
start /B "" program
thì nó đã hoạt động ...
Tôi nghi ngờ ý bạn là: Chạy một cái gì đó trong nền và lấy lại dòng lệnh ngay lập tức với chương trình đã khởi chạy.
START "" program
Tương đương với Unix
program &
start
gì? Nó không hoạt động mà không có nó (chỉ thực hiện một thể hiện lệnh mới), nhưng start
sự giúp đỡ không nói gì về nó, nó nói rằng tất cả các tham số là tối ưu (hoặc tôi không hiểu nó).
start
hoạt động mà không có tham số trống đối với tôi, nhưng tôi dường như nhận được một hệ vỏ với cấu hình riêng khi tôi sử dụng tham số trống, như một cài đặt tôi đã làm khi tôi không sử dụng tham số trống khi tôi sử dụng tham số trống. Tôi tự hỏi tại sao họ sử dụng cấu hình riêng biệt?
START "" program
bắt đầu một lệnh trong một thiết bị đầu cuối mới đối với tôi, trong khi program &
trong Unix chạy lệnh đó và in đầu ra cho cùng một thiết bị đầu cuối.
Bạn có thể sử dụng tập lệnh PowerShell (đã nhận xét!) Này:
# Create the .NET objects
$psi = New-Object System.Diagnostics.ProcessStartInfo
$newproc = New-Object System.Diagnostics.Process
# Basic stuff, process name and arguments
$psi.FileName = $args[0]
$psi.Arguments = $args[1]
# Hide any window it might try to create
$psi.CreateNoWindow = $true
$psi.WindowStyle = 'Hidden'
# Set up and start the process
$newproc.StartInfo = $psi
$newproc.Start()
# Return the process object to the caller
$newproc
Lưu nó dưới dạng một .ps1
tập tin. Sau khi kích hoạt thực thi tập lệnh (xem Kích hoạt tập lệnh trong wiki thẻ PowerShell ), bạn có thể truyền cho nó một hoặc hai chuỗi: tên của dòng thực thi và tùy chọn dòng đối số. Ví dụ:
.\hideproc.ps1 'sc' 'stop SomeService'
Tôi xác nhận rằng điều này hoạt động trên Windows 10.
Đây là cách máy chủ nội bộ PHP của tôi đi vào nền. Vì vậy, về mặt kỹ thuật nó nên làm việc cho tất cả.
start /B "" php -S 0.0.0.0:8000 &
Cảm ơn
Nếu bạn muốn chương trình dòng lệnh chạy mà không cần người dùng biết về nó, hãy xác định nó là một Dịch vụ Windows và nó sẽ chạy theo lịch trình.
schtasks
lệnh trong Windows XP trở lên (cảnh báo: schtasks
rất phức tạp).
Một câu trả lời liên quan, với 2 ví dụ:
gọi START / B "calc của tôi" "calc.exe"
gọi START / MIN "mongod của tôi" "% ProgramFiles% \ MongoDB \ Server \ 3.4 \ bin \ mongod.exe"
call Start /MIN "c" "calc.exe"
SW_*
để CreateProcessW
qua STARTUPINFO::wShowWindow
(bao gồm SW_HIDE
).
Bạn có thể thấy cách chính xác để làm điều này trong liên kết này:
Làm thế nào để chạy một tác vụ theo lịch trình mà không có cửa sổ lệnh xuất hiện
Tóm tắt, bạn phải chọn hộp kiểm 'Chạy xem người dùng có đăng nhập hay không'. Thông tin đăng nhập của người dùng tác vụ nên được nhập sau khi nhấn 'Ok'.
vừa bắt gặp chủ đề này, windows 7, sử dụng power shell, chạy chương trình thực thi trong nền, giống hệt như tên tệp unix &
ví dụ: start -NoNewWindow tên tệp
giúp bắt đầu
TÊN Quá trình bắt đầu
Quá trình bắt đầu SYNTAX [-FilePath] [[-ArgumentList]] [-Credential] [-WorkingDirectory] [-LoadUserProfile] [-NoNewWindow] [-PassThru] [-RedirectStiteriaError] [-WindowStyle {Bình thường | Ẩn | Tối thiểu hóa | Tối đa hóa}] [-UseNewEn Môi trường] []
Start-Process [-FilePath] <string> [[-ArgumentList] <string[]>] [-WorkingDirectory <string>] [-PassThru] [-Verb
<string>] [-Wait] [-WindowStyle <ProcessWindowStyle> {Normal | Hidden | Minimized | Maximized}]
[<CommonParameters>]
ALIASES bắt đầu