สร้างบริการ Windows จากปฏิบัติการได้


349

มีวิธีที่รวดเร็วในการสร้างไฟล์ที่ปฏิบัติการได้หรือไม่สร้างบริการ Windows ที่เมื่อเริ่มต้นจะเปิดใช้งานหรือไม่


8
นี่คือคำแนะนำของ Microsoft เกี่ยวกับวิธีการทำสิ่งนี้ให้สำเร็จ
PiRX

คำตอบ:


460

ในการสร้างบริการ Windows จากการปฏิบัติการคุณสามารถใช้sc.exe:

sc.exe create <new_service_name> binPath= "<path_to_the_service_executable>"

คุณต้องมีเครื่องหมายอัญประกาศรอบ ๆ ที่เกิดขึ้นจริงเส้นทางและพื้นที่หลังexebinPath=

ข้อมูลเพิ่มเติมเกี่ยวกับscคำสั่งที่สามารถพบได้ใน Microsoft KB251192

โปรดทราบว่ามันจะไม่ทำงานสำหรับการปฏิบัติการใด ๆ : การปฏิบัติการต้องเป็นบริการของ Windows ( เช่นการใช้ ServiceMain ) เมื่อลงทะเบียนปฏิบัติการที่ไม่ใช่บริการเป็นบริการคุณจะได้รับข้อผิดพลาดต่อไปนี้เมื่อพยายามเริ่มบริการ:

ข้อผิดพลาด 1053: บริการไม่ตอบสนองต่อการร้องขอการเริ่มต้นหรือการควบคุมในเวลาที่เหมาะสม

มีเครื่องมือที่สามารถสร้างบริการ Windows จากโปรแกรมปฏิบัติการที่ไม่ได้ให้บริการและดูคำตอบอื่น ๆ สำหรับตัวอย่างของเครื่องมือดังกล่าว


11
คุณจะต้องเรียกใช้พรอมต์คำสั่งในฐานะผู้ดูแลระบบเพื่อที่คำสั่งนี้จะทำงาน
Jeutnarg

2
เส้นทางต้องเป็นเส้นทางที่ผ่านการรับรองด้วย - ฉันไม่สามารถรับบริการของฉันเพื่อเริ่มต้นโดยใช้เส้นทางสัมพัทธ์
RunOfTheShipe

4
ช่องว่างหลังจากนั้นbinpath=และต้องล้อมรอบพา ธ ที่ปฏิบัติการได้ด้วยเครื่องหมายอัญประกาศคู่นั้นผิดทั้งหมดอย่างน้อยสำหรับ windows 10 จำเป็นต้องมีการอ้างถึงถ้าหากพา ธ นั้นมีอักขระพิเศษเช่นช่องว่าง นอกจากนี้ยังมีท่อ (โลว์ / บน / กรณีผสม) ไม่ว่าที่ใดก็ได้ในชื่อตัวแปรมากเกินไปและdisplayname="my service"เป็นของชำร่วยที่จะผ่านใน commandline ขณะที่การสร้างบริการไปยังมุมมองเป็นแถวแรกอื่น ( Name) services.mscที่

2
พื้นที่หลังจากbinPath=ที่ถูกต้องสำหรับผมใน Windows 7 แต่ไม่บน Windows 10
datchung

242

ใช้ NSSM ( non-Sucking Service Manager ) เพื่อเรียกใช้ไฟล์. BAT หรือไฟล์. EXE ใด ๆ เป็นบริการ

http://nssm.cc/

  • ขั้นตอนที่ 1 : ดาวน์โหลด NSSM
  • ขั้นตอนที่ 2 : ติดตั้ง sevice ของคุณด้วยnssm.exe install [serviceName]
  • ขั้นตอนที่ 3 : สิ่งนี้จะเปิด GUI ที่คุณจะใช้เพื่อค้นหาไฟล์ที่เรียกทำงานได้

6
ผู้จัดการบริการที่ดีที่สุดตลอดกาล ฉันได้รับ PlexWatch เพื่อติดตั้งเป็นบริการโดยใช้ NSSM
ความจำเป็น

2
ชุดนี้เป็นบริการตลอดไปหรือไม่ หน้าต่างทุกครั้งที่เริ่มบริการจะเริ่มขึ้นหรือไม่ ฉันจะทำสิ่งนี้โดยไม่ต้องโต้ตอบกับผู้ใช้ได้อย่างไร สคริปต์หรือรหัสบางประเภท?
John Demetriou

9
นี่เป็นสิ่งที่ยอดเยี่ยมมากฉันหวังว่าฉันจะยอมรับคำตอบนี้แทนที่จะเป็นคนแรก :-(
Latorre เยอรมัน

2
ฉันสามารถเรียกใช้ Dropbox เป็นบริการบนเซิร์ฟเวอร์ เป็นเครื่องมือที่ไม่ดูดแน่นอน!
Barry Guvenkaya

1
ไฟล์ exe ต้องเป็นโครงการบริการ windows เพื่อให้สามารถทำงานกับ nssm หรืออาจเป็นไฟล์ exe ปกติหรือไม่เพราะเมื่อฉันใช้ nssm start [servicename] มันแสดงข้อผิดพลาดเช่นบริการ windows ไม่สามารถทำงานได้จาก command prompt เป็นต้น
Sanjeev

92

คำตอบที่ขยาย (Kevin Tong)

ขั้นตอนที่ 1:ดาวน์โหลด & Unzip nssm-2.24.zip

ขั้นตอนที่ 2:จากประเภทบรรทัดคำสั่ง:

C:\> nssm.exe install [servicename]

มันจะเปิด GUI ดังต่อไปนี้ (ตัวอย่างคือเซิร์ฟเวอร์ UT2003) จากนั้นเรียกดูได้ที่: yourapplication.exe

ป้อนคำอธิบายรูปภาพที่นี่

ข้อมูลเพิ่มเติมเกี่ยวกับ: https://nssm.cc/usage


4
nssm.exe install [serviceName]ที่ถูกต้องไวยากรณ์ โซลูชันนี้ใช้งานได้ แต่หากคุณมีโปรแกรมประยุกต์ GUI จะไม่สามารถใช้งานได้ใน Win Serever2003 หากคุณต้องการลบออกในภายหลังให้ใช้nssm.exe remove [youservicename]
Hammad Khan

1
ฉันสมมติว่าการอ้างอิงถึง nginx เป็นเพราะนั่นเป็นโปรแกรมเฉพาะที่คุณต้องการเรียกใช้เป็นบริการหรือไม่ จนกว่าฉันจะเห็นความคิดเห็นของ hmd ด้านบนฉันคิดว่าคุณกำลังพยายามช่วยโดยบอกว่า nginx นั้นเป็นสิ่งที่ต้องพึ่งพาในการติดตั้งหรืออะไรก็ตาม ... แต่จาก GUI ดูเหมือนว่าคุณไม่ได้ติดตั้ง nginx คุณกำลังติดตั้ง Unreal Tournament เซิร์ฟเวอร์? เพียงแค่ชี้ให้เห็นว่าตัวอย่างไม่สอดคล้องและอาจทำให้เข้าใจผิด ง่าย ๆ "สมมติว่าคุณต้องการติดตั้ง nginx เป็นบริการจากนั้นจะมีลักษณะเช่นนี้:" จะช่วย
flutefreak7

@ flutefreak7 ใช่nginxไม่จำเป็นและทำให้เข้าใจผิด คำสั่งจะทำงานโดยไม่ได้เช่นกัน เป็นพารามิเตอร์ทางเลือกถ้าคุณต้องการระบุชื่อบริการจากพรอมต์คำสั่ง
Hammad Khan

1
เมื่อฉันพยายามใช้ nssm แบบฟอร์ม Windows ของฉันทำงาน แต่รูปแบบไม่แสดง ... ทำไม?
Radenko Zec

มันใช้งานแอปพลิเคชันของคุณเป็นบริการของ Windows ซึ่งส่วนใหญ่ใช้สำหรับแบ็กเอนด์ อาจเป็นไปได้ว่าการทำงานเป็นชื่อผู้ใช้รูท / ผู้ดูแลระบบคนอื่น คุณต้องตรวจสอบ นอกจากนี้ยังมีข้อมูลอื่น ๆ อีกมากมายที่คุณสามารถตรวจสอบได้ที่นี่: nssm.cc/usage

16

คำตอบที่มีอยู่มากมายรวมถึงการแทรกแซงของมนุษย์ในเวลาติดตั้ง นี่อาจเป็นกระบวนการที่เกิดข้อผิดพลาดได้ง่าย หากคุณมีโปรแกรมเรียกทำงานจำนวนมากที่ต้องการติดตั้งเป็นบริการสิ่งสุดท้ายที่คุณต้องทำคือทำด้วยตนเองเมื่อทำการติดตั้ง

ในสถานการณ์ที่อธิบายไว้ข้างต้นฉันได้สร้างsermanเครื่องมือบรรทัดคำสั่งเพื่อติดตั้งโปรแกรมปฏิบัติการเป็นบริการ สิ่งที่คุณต้องเขียน (และเขียนเพียงครั้งเดียวเท่านั้น) คือไฟล์การกำหนดค่าบริการที่เรียบง่ายพร้อมกับปฏิบัติการของคุณ วิ่ง

serman install <path_to_config_file>

จะติดตั้งบริการ stdoutและstderrถูกบันทึกไว้ทั้งหมด สำหรับข้อมูลเพิ่มเติมโปรดดูที่การเว็บไซต์โครงการ

ไฟล์กำหนดค่าการทำงานนั้นง่ายมากดังที่แสดงด้านล่าง แต่มันก็มีคุณสมบัติที่มีประโยชน์มากมายเช่น<env>และ<persistent_env>ด้านล่าง

<service>
  <id>hello</id>
  <name>hello</name>
  <description>This service runs the hello application</description>

  <executable>node.exe</executable>

  <!-- 
       {{dir}} will be expanded to the containing directory of your 
       config file, which is normally where your executable locates 
   -->
  <arguments>"{{dir}}\hello.js"</arguments>

  <logmode>rotate</logmode>

  <!-- OPTIONAL FEATURE:
       NODE_ENV=production will be an environment variable 
       available to your application, but not visible outside 
       of your application
   -->
  <env name="NODE_ENV" value="production"/>

  <!-- OPTIONAL FEATURE:
       FOO_SERVICE_PORT=8989 will be persisted as an environment
       variable to the system.
   -->
  <persistent_env name="FOO_SERVICE_PORT" value="8989" />
</service>

9

สิ่งพิเศษเหล่านี้พิสูจน์ว่ามีประโยชน์ .. จำเป็นต้องดำเนินการในฐานะผู้ดูแลระบบ

sc create  <service_name> binpath=<binary_path>
sc stop    <service_name>
sc queryex <service_name>
sc delete  <service_name>

หากชื่อบริการของคุณมีช่องว่างให้ใส่ "เครื่องหมายคำพูด"


ไม่มีคำสั่งติดตั้งหรือใน My Win 2003 sc.exe 5.2.3790.3959 หรือในM $ F1
user6698332

1
ใช้ "สร้าง" แทน "ติดตั้ง" sc create <service_name> binpath= <binary_path>
CSquared

4

ผมได้ทดสอบผลิตภัณฑ์ที่ดีสำหรับการที่: AlwaysUp ไม่ฟรี แต่พวกเขามีระยะเวลาทดลองใช้ 30 วันเพื่อให้คุณลอง ...


0

คุณสามารถตรวจสอบยูทิลิตี้ฟรีเล็ก ๆ ของฉันสำหรับการดำเนินงาน create \ edit \ delete นี่คือตัวอย่างการสร้าง:

ไปที่บริการ -> แก้ไข -> สร้าง

ป้อนคำอธิบายรูปภาพที่นี่

ไฟล์ที่ปฏิบัติการได้ (google ไดรฟ์): [ดาวน์โหลด]

รหัสแหล่งที่มา: [ดาวน์โหลด]

บล็อกโพสต์: [BlogLink]

คลาสตัวแก้ไขบริการ: WinServiceUtils.cs

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