Windows: สร้าง (ติดตั้ง) บริการด้วยตนเอง

/th/images/sc-create-windows-service-from-cmd.png

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

มีเครื่องมือ Windows ในตัวหลายอย่างที่ช่วยให้ผู้ดูแลระบบสามารถสร้างบริการใหม่ผ่านทางพรอมต์คำสั่งได้ ซึ่งรวมถึงคำสั่งคอนโซล sc.exe และ PowerShell cmdlet บริการใหม่

คำสั่งต่อไปนี้จะสร้างบริการใหม่จากไฟล์ปฏิบัติการที่ระบุพร้อมอาร์กิวเมนต์เพิ่มเติม:

sc สร้าง CorpCollectorService binPath = "C:\Program Files (x86)\CORP\collector.exe-i C:\tools\config.xml"start=auto DisplayName =บริการตัวรวบรวมบันทึก CORP"

/th/images/sc-create-windows-service-from-cmd.png.webp

หากดำเนินการคำสั่งสำเร็จ ข้อความจะปรากฏขึ้น:


SC CreateService SUCCESS

มีการใช้อาร์กิวเมนต์ต่อไปนี้:

  • CorpCollectorService – ชื่อบริการใหม่

  • binPath – มีพาธแบบเต็มไปยังไฟล์ปฏิบัติการ พร้อมด้วยอาร์กิวเมนต์การเรียกทำงานที่จำเป็น (ในเครื่องหมายคำพูดหากมีช่องว่าง)

  • start=auto – เริ่มบริการโดยอัตโนมัติเมื่อบูต Windows ( boot|system|auto|demand|disabled )

  • DisplayName — ชื่อที่แสดงบริการ

สามารถใช้พารามิเตอร์เพิ่มเติมได้:

  • ประเภท — ประเภทของบริการ โดยค่าเริ่มต้น

เป็นเจ้าของ

ถูกใช้ หมายความว่าบริการทำงานตามกระบวนการของตัวเอง คุณยังสามารถระบุได้ที่นี่: own|share|kernel|filesys|adapt|rec|interact

  • โดยค่าเริ่มต้น บริการจะทำงานในนามของ

ระบบท้องถิ่น หากคุณต้องการใช้บริการในนามของบัญชีผู้ใช้เฉพาะ ให้ระบุชื่อผู้ใช้และรหัสผ่านโดยใช้ตัวเลือก: obj="woshub\user1"password="myUserPassw0r1"

ตอนนี้ เปิดสแนปอินการจัดการบริการกราฟิกของบริการ ( services.msc ) บริการใหม่จะปรากฏในรายการบริการ (กด F5 เพื่อรีเฟรชฐานข้อมูลตัวจัดการบริการ) ที่นี่คุณสามารถเริ่มหรือหยุดบริการหรือเปลี่ยนประเภทการเริ่มต้นได้ /th/images/new-service-appears-in-services-management-console.png.webp

การตั้งค่าบริการทั้งหมดจะถูกเก็บไว้ภายใต้คีย์รีจิสทรี HKEY\_LOCAL\_MACHINE\SYSTEM\CurrentControlSet\Services\ คีย์ย่อย CorpCollectorService ถูกสร้างขึ้นโดยอัตโนมัติสำหรับบริการใหม่

/th/images/services-settings-are-stored-in-the-registry.png.webp

นี่คือคำสั่ง PowerShell ที่คล้ายกันสำหรับการสร้างบริการใหม่:

ชื่อบริการใหม่ CorpCollectorService-BinaryPathName "C:\Program Files (x86)\CORP\collector.exe-i C:\tools\config.xml"-DisplayName "บริการทดสอบของฉัน"-คำอธิบาย "CORP Log Collector Service"-StartupType "อัตโนมัติ"

/th/images/new-service-create-service-using-powershell.png.webp

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

` $username=“user123”$password=“PaSSw0rd1”$securepassword=ConvertTo-SecureString $password-AsPlainText-บังคับ

$cred=New-Object System.Management.Automation.PSCredential ($ชื่อผู้ใช้, $securepassword)

บริการใหม่ …-ข้อมูลรับรอง $cred `

โปรดทราบว่าไบนารีที่ปฏิบัติการได้บางตัวอาจไม่สามารถทำงานได้สำเร็จในฐานะบริการของ Windows แอปพลิเคชันต้องได้รับการออกแบบมาโดยเฉพาะเพื่อทำงานเป็นบริการที่ตอบสนองต่อคำสั่งจาก Service Control Manager (SCM) ข้อผิดพลาด 1,053 จะปรากฏขึ้นเมื่อพยายามเริ่มบริการที่ไม่สามารถจัดการสัญญาณควบคุม SCM:


Windows could not start the MyService1 service on Local Computer.Error 1053: The service did not respond to the start or control request in a timely fashion.

/th/images/windows-could-not-start-the-service-on-local-compu.png.webp

สามารถใช้เครื่องมือของบริษัทอื่นหลายอย่างเพื่อสร้างบริการจากโปรแกรมที่ไม่ได้รับการออกแบบมาให้ทำงานในโหมดบริการ Windows (รวมถึงโปรแกรมที่มีอินเทอร์เฟซแบบกราฟิก) Windows Server Resource Kit 2003 มีคำสั่ง srvany.exe และ instsrv.exe ซึ่งสามารถนำไปใช้สร้างบริการจากไบนารีใดก็ได้ อย่างไรก็ตาม ตอนนี้ควรใช้เครื่องมือ NSSM ( Non-Sucking Service Manager) ที่ทันสมัยกว่า ต่างจากเครื่องมือ Microsoft รุ่นเก่าตรงที่จะตรวจสอบกระบวนการแอปที่ทำงานอยู่และมีความสามารถในการจัดการกระบวนการขั้นสูง NSSM สามารถเรียกใช้แอป สคริปต์ หรือปฏิบัติการใดๆ ก็ได้เป็นบริการ Windows พื้นหลังที่เชื่อถือได้ และรีสตาร์ทโดยอัตโนมัติหากเกิดปัญหา

NSSM สามารถติดตั้งได้โดยใช้ตัวจัดการแพ็คเกจ WinGet:

ติดตั้ง winget--id NSSM.NSSM-e

ตอนนี้ หากต้องการสร้างบริการจากไฟล์ปฏิบัติการใด ๆ ให้รัน:

nssm ติดตั้ง testservice "C:\Tools\collector.exe"

โปรดทราบว่าในคุณสมบัติของบริการใหม่ nssm.exe ทำหน้าที่เป็นตัวเรียกใช้งานสำหรับไบนารีของแอปพลิเคชันของคุณ

/th/images/create-a-service-using-nssm.png.webp

NSSM จัดเตรียม GUI แบบธรรมดาที่ช่วยให้สามารถกำหนดค่าพารามิเตอร์บริการได้อย่างสะดวก

ตัวอย่างเช่น หากต้องการแก้ไขบริการที่สร้างไว้ก่อนหน้านี้ ให้รัน:

บริการทดสอบการแก้ไข nssm

/th/images/nssm-service-editor-gui.png.webp

ก่อนหน้านี้เราได้สาธิตวิธีการใช้ NSSM เพื่อเรียกใช้สคริปต์ PowerShell เป็นบริการของระบบ

*️⃣ ลิงค์ที่มา:

ตัวจัดการแพ็คเกจ WinGet เรียกใช้สคริปต์ PowerShell เป็นบริการระบบ