วิธีเริ่มบริการด้วยพารามิเตอร์เริ่มต้นที่แน่นอนบน Windows


17

ฉันจะเริ่มบริการด้วยพารามิเตอร์บางอย่างได้อย่างไร ในคำถามอื่นฉันได้พบ

servicename เริ่มต้นสุทธิ

แต่ถ้าฉันลองทำสิ่งนี้จะnetเกิดข้อผิดพลาดทางไวยากรณ์กับฉัน

ผมทำอะไรผิดหรือเปล่า?

แก้ไข:เพื่อชี้แจงnet start servicenameงานได้ดี แต่ฉันต้องส่งพารามิเตอร์ไปยังบริการ ฉันสามารถทำได้ด้วยตนเองservices.mscโดยการกรอกพารามิเตอร์เริ่มต้นก่อนที่จะเริ่มบริการ แต่ฉันจะทำสิ่งนี้จากสคริปต์ได้อย่างไร

แก้ไขอื่น:ขออภัย แต่คำถามของฉันถูกทำให้เข้าใจผิด ในการทดสอบของฉันฉันมีพารามิเตอร์อื่น ๆ อีกมากมายและมันก็ไม่ได้/blah net startบ่น ในความเป็นจริงสิ่งใดที่เริ่มต้นด้วยเครื่องหมายทับเป็นเรื่องปกติ ดังนั้นใช้net start servicename /blahงานnet start servicename blahได้ไม่ทำงาน เนื่องจากฉันต้องการnet start servicename /foo barมันbarเป็นปัญหาที่เกิดขึ้น

คำตอบ:


29
sc เริ่ม fooservice arg1 arg2 ...

ฉันไม่รู้ว่าฉันจะพลาดคำตอบของคุณได้อย่างไร แต่ฉันดีใจมากที่ฉันพบมันในตอนนี้ (โดยบังเอิญ) นี้ทำงานเหมือนจับใจ - /แม้จะมีพารามิเตอร์ที่ไม่ได้เริ่มต้นด้วย ขอบคุณมาก!
sbi

มันเป็นปี 2018 และ "sc start ... " และ "net start ... " ดูเหมือนว่าจะไม่ทำงานใน Windows 10 การแก้ไขรีจิสทรีจะทำงานserverfault.com/questions/507561/…
MarcH

8

NET STARTจะไม่อนุญาตให้คุณส่งพารามิเตอร์ตามอำเภอใจเท่าที่ฉันรู้ (ดูเหมือนว่าพวกเขาจะต้องนำหน้าด้วย /) ฉันเชื่อว่าวิธีที่ถูกต้องคือการแก้ไขรีจิสตรีคีย์ที่เหมาะสมและหยุด / เริ่มบริการ สมมติว่าบริการที่กำหนดเองของคุณเรียกว่า MyService:

[HKLM\SYSTEM\CurrentControlSet\Services\MyService]
"ImagePath":C:\Projects\MyService\bin\MyService.exe Parameter1 Parameter2

แม้ว่าวิธีที่ดีกว่าคือการจัดเก็บการกำหนดค่าของคุณที่บริการรู้เช่นบางทีรีจิสทรีหรือระบบไฟล์และอ่านค่าที่คุณต้องการ อย่างที่คุณเห็นการปรับแต่งบรรทัดคำสั่งนั้นค่อนข้างเจ็บปวดมากกว่าที่ควรจะเป็น

ถ้านี่เป็นโอกาสบริการ .NET พัฒนาคุณสามารถสร้างnสำเนาของปฏิบัติการบนระบบไฟล์ของคุณและมีแต่ละโดยอัตโนมัติได้รับพารามิเตอร์จากแฟ้ม app.config เหมาะสม

ดูเหมือนว่าคุณอาจก้าวไปไกลเกินนอกกล่อง Win32 ตั้งแต่นี้ดูเหมือนว่าการพัฒนาที่กำหนดเองใด ๆ ของโซลูชั่นที่นำเสนออื่น ๆ ในขณะที่อาจไม่เหมาะของคุณจะทำงานได้อย่างถูกต้องและเป็นวิธีที่ปลอดภัยไป


ฮึ. บริการใช้ไฟล์กำหนดค่า มันอาจใช้ชื่อไฟล์เริ่มต้นหรือชื่อที่ส่งผ่าน เนื่องจากฉันต้องการบริการที่ใช้งานสองอินสแตนซ์ที่ต่างกันฉันจึงต้องชี้ไปที่ไฟล์การกำหนดค่าที่แตกต่างกัน ต้องทำซอกับรีจิสทรีดูเหมือนว่าแฮ็คน่าเกลียดมาก ๆ ไม่มีทางอื่นนอกจากนั้น (และ GUI) หรือไม่?
sbi

Goyuix ดูคำถามที่แก้ไขของฉัน net start ไม่ยอมรับพารามิเตอร์ /แต่เฉพาะผู้ที่เริ่มต้นด้วย
sbi

Goyuix sc.exeตอนนี้ผมใช้ ดูคำตอบของ grawity (ซึ่งฉันสามารถพลาดได้ในตอนนี้)
sbi

4

คุณต้องเฉือนก่อนที่แต่ละnet startพารามิเตอร์เมื่อใช้ ตรวจสอบให้แน่ใจว่าอ้างพารามิเตอร์ที่มีช่องว่างด้วย

net start servicename /param0 /"param1 with spaces" /"/param2_has_slash"

ดูปัญหาของฉันอีกครั้ง ฉันมีพารามิเตอร์ที่ (ต้อง) เริ่มต้นด้วยเครื่องหมายทับด้วย ฉันจะผ่านสิ่งเหล่านั้นได้อย่างไร
sbi

ลองสิ่งนี้: ชื่อผู้ใช้เริ่มต้นสุทธิ / "/ foo" / บาร์
แม้ Mien

3

net start servicename /foo สำหรับอาร์กิวเมนต์เดียว

net start servicename /"foo bar" สำหรับสตริงหรือรายการของ args

หมายเหตุ : คำถามนี้มีอายุ 8 ปี แต่ฉันไม่มีชื่อเสียงที่จะแสดงความคิดเห็นเกี่ยวกับคำตอบที่ยอมรับและนี่ยังเป็นผลการค้นหาอันดับต้น ๆ ของ Google ในปี 2018 ดังนั้นฉันจึงต้องการชี้แจงว่าตอนนี้ทำงานอย่างไรเกี่ยวกับการแก้ไขคำถามสุดท้าย


หมายเหตุ: ฉันให้ upvote ดังนั้นตอนนี้คำตอบของคุณอยู่ที่อันดับ 4 และคุณได้รับตัวแทน ขอให้สนุกที่นี่! :-)
sbi

1

คุณต้องใช้ชื่อบริการจริงตามที่ปรากฏในแผงควบคุมบริการ หากมีช่องว่างคุณต้องใส่เครื่องหมายคำพูดล้อมรอบชื่อบริการ

หากต้องการรับชื่อบริการจริงให้พิมพ์net startโดยไม่มีพารามิเตอร์ใด ๆ บนพรอมต์คำสั่ง ควรให้รายการบริการที่ใช้งานอยู่ทั้งหมดเพื่อให้คุณได้รับชื่อบริการจริง จากนั้นก็ใช้net start <servicename>


Robert เป็นบริการของฉันที่ฉันติดตั้งแล้วเริ่มเขียนสคริปต์ ฉันnet start "my-service-name"สบายดี มันnet start "my-service-name" /blahทำให้ฉันเกิดข้อผิดพลาด ฉันได้ลองnet start "my-service-name" -blahแล้วและนี่ก็เป็นข้อผิดพลาดทางไวยากรณ์เช่นกัน
sbi

0

InstSrv และ SrvAny ช่วยได้หรือไม่ คู่มือและลิงค์


ฉันดูมันสั้น ๆ และฉันก็ไม่คิดอย่างนั้น (โปรดแก้ไขให้ฉันด้วยถ้าฉันผิด) ฉันมีบริการจริงที่เปิดใช้งานได้และทำงานได้ดี เป็นเพียงแค่นั้น (สำหรับการทดสอบ) ฉันต้องติดตั้งและเริ่มจากสคริปต์และฉันต้องส่งพารามิเตอร์ไปยังบริการ
sbi
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.