ฉันจะดำเนินการบรรทัดคำสั่งของ windows ในพื้นหลังโดยไม่ต้องโต้ตอบกับผู้ใช้ที่ใช้งานอยู่ได้อย่างไร
ฉันจะดำเนินการบรรทัดคำสั่งของ windows ในพื้นหลังโดยไม่ต้องโต้ตอบกับผู้ใช้ที่ใช้งานอยู่ได้อย่างไร
คำตอบ:
คำถามของคุณค่อนข้างคลุมเครือ แต่มีโพสต์บน ServerFaultซึ่งอาจมีข้อมูลที่คุณต้องการ คำตอบที่นั่นอธิบายถึงวิธีการเรียกใช้แบตช์ไฟล์หน้าต่างที่ซ่อนอยู่:
คุณสามารถเรียกใช้งานได้อย่างเงียบ ๆ โดยใช้ไฟล์ Windows Script แทน วิธีการเรียกใช้ช่วยให้คุณสามารถเรียกใช้สคริปต์ในโหมดที่มองไม่เห็น สร้าง
.vbs
ไฟล์เช่นนี้Dim WinScriptHost Set WinScriptHost = CreateObject("WScript.Shell") WinScriptHost.Run Chr(34) & "C:\Scheduled Jobs\mybat.bat" & Chr(34), 0 Set WinScriptHost = Nothing
และกำหนดเวลา อาร์กิวเมนต์ที่สองในตัวอย่างนี้ตั้งค่าลักษณะหน้าต่าง 0 หมายถึง "ซ่อนหน้าต่าง"
นี่มันช้าไปหน่อย แต่ฉันก็เจอคำถามนี้ในขณะที่ค้นหาคำตอบด้วยตัวเองและฉันก็พบสิ่งนี้:
START /B program
ซึ่งบน Windows นั้นใกล้กับคำสั่ง Linux มากที่สุด:
program &
จากระบบช่วยเหลือของคอนโซล:
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.
ปัญหาหนึ่งที่ฉันเห็นด้วยคือคุณมีมากกว่าหนึ่งโปรแกรมที่เขียนลงในหน้าต่างคอนโซลมันจะสับสนเล็กน้อยและสับสน
ในการทำให้ไม่โต้ตอบกับผู้ใช้คุณสามารถเปลี่ยนเส้นทางผลลัพธ์ไปยังไฟล์:
START /B program > somefile.txt
start /B "" program
นี้มันจะใช้งานได้ ...
ฉันสงสัยว่าคุณหมายถึง: เรียกใช้บางสิ่งบางอย่างในพื้นหลังและรับบรรทัดคำสั่งกลับมาทันทีที่มีการเปิดตัวโปรแกรมต่อเนื่อง
START "" program
ซึ่งเทียบเท่ากับยูนิกซ์ของ
program &
start
คืออะไร มันไม่ทำงานหากไม่มีมัน (ทำงานแค่อินสแตนซ์คำสั่งใหม่) แต่start
ความช่วยเหลือไม่ได้พูดอะไรเลยมันระบุว่าพารามิเตอร์ทั้งหมดเป็นออพติคอล (หรือฉันไม่เข้าใจ)
start
ทำงานโดยไม่มีพารามิเตอร์ที่ว่างเปล่าสำหรับฉัน แต่ฉันดูเหมือนจะได้รับหอยที่มีการกำหนดค่าแยกต่างหากเมื่อฉันใช้พารามิเตอร์ที่ว่างเปล่าเนื่องจากการตั้งค่าที่ฉันทำเมื่อฉันไม่มีพารามิเตอร์ที่ว่างเปล่าไม่ได้ใช้เมื่อฉันใช้ พารามิเตอร์ว่าง ฉันสงสัยว่าทำไมพวกเขาใช้การกำหนดค่าแยกต่างหาก
START "" program
เริ่มคำสั่งในเทอร์มินัลใหม่สำหรับฉันในขณะที่program &
Unix รันคำสั่งและพิมพ์ผลลัพธ์ไปยังเทอร์มินัลเดียวกัน
START /MIN program
สิ่งที่กล่าวมาข้างต้นนั้นใกล้เคียงกับ Unix program &
คุณสามารถใช้สคริปต์ PowerShell นี้ (แสดงความคิดเห็น!):
# 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
บันทึกเป็น.ps1
ไฟล์ หลังจากเปิดใช้งานการเรียกใช้สคริปต์ (ดูที่การเปิดใช้งานสคริปต์ในแท็ก PowerShell wiki ) คุณสามารถส่งหนึ่งหรือสองสาย: ชื่อของไฟล์เรียกทำงานและบรรทัดอาร์กิวเมนต์ที่เป็นทางเลือก ตัวอย่างเช่น:
.\hideproc.ps1 'sc' 'stop SomeService'
ฉันยืนยันว่าใช้งานได้กับ Windows 10
นี่คือวิธีที่เซิร์ฟเวอร์ภายใน PHP ของฉันเข้าสู่พื้นหลัง ดังนั้นในทางเทคนิคแล้วควรใช้งานได้สำหรับทุกคน
start /B "" php -S 0.0.0.0:8000 &
ขอบคุณ
หากคุณต้องการให้โปรแกรมบรรทัดคำสั่งรันโดยที่ผู้ใช้ไม่ทราบให้กำหนดเป็นบริการของ Windows และโปรแกรมจะทำงานตามกำหนดเวลา
schtasks
คำสั่งใน Windows XP ขึ้นไป (คำเตือน: schtasks
ซับซ้อน)
คำตอบที่เกี่ยวข้องกับ 2 ตัวอย่าง:
โทรหา START / B "my calc" "calc.exe"
โทรหา START / นาที "my mongod" "% ProgramFiles% \ MongoDB \ Server \ 3.4 \ bin \ mongod.exe"
call Start /MIN "c" "calc.exe"
SW_*
ไปยังCreateProcessW
ผ่านSTARTUPINFO::wShowWindow
(รวมถึงSW_HIDE
)
คุณสามารถดูวิธีที่ถูกต้องในการทำลิงค์นี้:
วิธีการเรียกใช้งานที่กำหนดเวลาไว้โดยไม่มีหน้าต่างคำสั่งปรากฏ
โดยสรุปคุณต้องทำเครื่องหมายที่ช่อง 'เรียกใช้ไม่ว่าผู้ใช้จะเข้าสู่ระบบหรือไม่' ควรป้อนข้อมูลรับรองผู้ใช้งานหลังจากกด 'ตกลง'
เพิ่งเจอเธรด windows 7 นี้โดยใช้ power shell เรียกใช้ไฟล์ปฏิบัติการในพื้นหลังเหมือนกับชื่อไฟล์ unix &
ตัวอย่าง: start -NoNewWindow ชื่อไฟล์
ช่วยเริ่มต้น
NAME เริ่มต้นกระบวนการ
SYNTAX Start-Process [-FilePath] [[-ArgumentList]] [-Credential] [-DirectoryInputDirectory] [-LoadUserProfile] [-NoNewWindow] [-RedirectStandardError] [-RedirectStandardInput] [-WindowStyle {ปกติ | ซ่อน | ย่อเล็กสุด | Maximized}] [-UseNewEnvironment] []
Start-Process [-FilePath] <string> [[-ArgumentList] <string[]>] [-WorkingDirectory <string>] [-PassThru] [-Verb
<string>] [-Wait] [-WindowStyle <ProcessWindowStyle> {Normal | Hidden | Minimized | Maximized}]
[<CommonParameters>]
ALIASES saps เริ่มต้น