NSSM เป็นโปรแกรมผู้ช่วยบริการที่คล้ายกับ Srvany และ Cygrunsrv มันสามารถเริ่มแอปพลิเคชันใด ๆ (เช่นคอนโซล) เป็นบริการ NT และจะรีสตาร์ทบริการหากล้มเหลวด้วยเหตุผลใดก็ตาม
NSSM ยังมีตัวติดตั้งบริการกราฟิกและน้ำยาล้าง
นี่คือส้อมของ NSSM
ไฟล์ไบนารีที่คุณสามารถหาได้ในรุ่นที่นี่
รหัสต้นฉบับ: https://git.nssm.cc/nssm/nssm โดย Iain Patterson
เอกสาร: การใช้คำสั่ง
ในบันทึกการใช้งานด้านล่างข้อโต้แย้งของโปรแกรมอาจเขียนในวงเล็บมุมและ/หรือวงเล็บสี่เหลี่ยมจัตุรัส หมายความว่าคุณต้องแทรกสตริงที่เหมาะสมและ [] หมายถึงสตริงเป็นทางเลือก ดูตัวอย่างด้านล่าง ...
โปรดทราบว่าทุกที่ปรากฏว่าคุณอาจแทนที่ชื่อที่แสดงของบริการ
หากต้องการติดตั้งบริการให้เรียกใช้
nssm install <servicename>
คุณจะได้รับแจ้งให้ป้อนเส้นทางเต็มไปยังแอปพลิเคชันที่คุณต้องการเรียกใช้และตัวเลือกบรรทัดคำสั่งใด ๆ เพื่อส่งต่อไปยังแอปพลิเคชันนั้น
ใช้ System Service Manager (Services.MSC) เพื่อควบคุมคุณสมบัติบริการขั้นสูงเช่นวิธีการเริ่มต้นและการโต้ตอบเดสก์ท็อป NSSM อาจสนับสนุนตัวเลือกเหล่านี้ในภายหลัง ...
หากต้องการติดตั้งบริการให้เรียกใช้
nssm install <servicename> <application> [<options>]
NSSM จะพยายามติดตั้งบริการที่เรียกใช้แอปพลิเคชันที่มีชื่อพร้อมตัวเลือกที่กำหนด (ถ้าคุณระบุใด ๆ )
อย่าลืมที่จะแนบเส้นทางใน "คำพูด" หากมีช่องว่าง!
หากคุณต้องการรวมคำพูดในตัวเลือกคุณจะต้อง "" "ใบเสนอราคา" "คำพูด
NSSM จะเปิดตัวแอปพลิเคชันที่ระบุไว้ในรีจิสทรีเมื่อคุณส่งสัญญาณเริ่มต้นและจะยุติเมื่อคุณส่งสัญญาณหยุด จนถึงตอนนี้เหมือน Srvany แต่ NSSM เป็นผู้จัดการบริการที่ไม่ดูดและสามารถดำเนินการได้หาก/เมื่อแอปพลิเคชันตาย
ไม่มีการกำหนดค่าจากคุณ NSSM จะพยายามรีสตาร์ทตัวเองหากสังเกตว่าแอปพลิเคชันเสียชีวิต แต่คุณไม่ได้ส่งสัญญาณหยุด NSSM จะพยายามหยุดพักระหว่างความพยายามแต่ละครั้งจนกว่าบริการจะเริ่มสำเร็จหรือส่งสัญญาณหยุด
NSSM จะหยุดเวลานานขึ้นระหว่างการรีสตาร์ทครั้งต่อไปหากบริการไม่สามารถเริ่มต้นได้ในเวลาที่เหมาะสมสูงสุดสี่นาที นี่คือดังนั้นจึงไม่ได้ใช้เวลา CPU มากเกินไปในการพยายามเริ่มแอปพลิเคชันที่ล้มเหลวซ้ำแล้วซ้ำอีก หากคุณระบุสาเหตุของความล้มเหลวและไม่ต้องการรอคุณสามารถใช้คอนโซลบริการ Windows (ซึ่งบริการจะแสดงในสถานะหยุดชั่วคราว) เพื่อส่งสัญญาณดำเนินการต่อไปยัง NSSM และจะลองใหม่ภายในไม่กี่วินาที
โดยค่าเริ่มต้น NSSM จะกำหนด "เวลาที่เหมาะสม" ให้อยู่ในระยะ 1,500 มิลลิวินาที คุณสามารถเปลี่ยนเกณฑ์สำหรับบริการได้โดยการตั้งค่าจำนวนมิลลิวินาทีเป็นค่า reg_dword ในรีจิสทรีที่ hklm system currentcontrolset services <ervice> parameters Appthrottle
อีกทางเลือกหนึ่ง NSSM สามารถหยุดระยะเวลาที่กำหนดได้ชั่วคราวก่อนที่จะพยายามรีสตาร์ทแอปพลิเคชันแม้ว่าจะประสบความสำเร็จในระยะเวลาที่ระบุโดย Appthrottle NSSM จะปรึกษาค่า reg_dword ที่ hklm system currentcontrolset services <service> parameters apprestartdelay สำหรับจำนวนมิลลิวินาทีเพื่อรอก่อนที่จะพยายามรีสตาร์ท หากมีการตั้งค่า ApprestartDelay และแอปพลิเคชันถูกกำหนดให้อยู่ภายใต้การควบคุมปริมาณ NSSM จะหยุดบริการชั่วคราวไม่ว่าจะเป็นระยะเวลานานของการรีสตาร์ทการล่าช้าและระยะเวลาเค้นที่คำนวณได้
หาก ApprestartDelay หายไปหรือไม่ถูกต้องจะมีการใช้การควบคุมปริมาณเท่านั้น
NSSM จะดูในรีจิสทรีภายใต้ HKLM System CurrentControlset Services <Service> Parameters AppExit สำหรับค่าสตริง (reg_expand_sz) ที่สอดคล้องกับรหัสออกของแอปพลิเคชัน หากแอปพลิเคชันออกด้วยรหัส 1 เช่น NSSM จะค้นหาค่าสตริงภายใต้ AppExit ที่เรียกว่า "1" หรือหากไม่พบมันจะกลับไปที่ค่า AppExit (เริ่มต้น) คุณสามารถค้นหารหัสออกสำหรับแอปพลิเคชันโดยปรึกษาบันทึกเหตุการณ์ระบบ NSSM จะบันทึกรหัสออกเมื่อแอปพลิเคชันออก
จากข้อมูลที่พบในรีจิสทรี NSSM จะดำเนินการหนึ่งในสามการกระทำ:
หากข้อมูลค่าคือ "รีสตาร์ท" NSSM จะพยายามรีสตาร์ทแอปพลิเคชันตามที่อธิบายไว้ข้างต้น นี่คือพฤติกรรมเริ่มต้น
หากข้อมูลค่าคือ "ละเว้น" NSSM จะไม่พยายามรีสตาร์ทแอปพลิเคชัน แต่จะทำงานต่อไป สิ่งนี้จะเลียนแบบพฤติกรรม (โดยปกติที่ไม่พึงประสงค์) ของ Srvany คอนโซลบริการ Windows จะแสดงบริการที่ยังคงทำงานอยู่แม้ว่าแอปพลิเคชันจะออก
หากข้อมูลค่าคือ "ออก" NSSM จะออกจากอย่างสง่างาม คอนโซลบริการ Windows จะแสดงบริการที่หยุด หากคุณต้องการให้การควบคุมการกู้คืนบริการอย่างละเอียดยิ่งขึ้นคุณควรใช้รหัสนี้และแก้ไขการกระทำที่ล้มเหลวด้วยตนเอง โปรดทราบว่าเวอร์ชัน Windows ก่อนที่ Vista จะไม่พิจารณาทางออกดังกล่าวว่าเป็นความล้มเหลว ใน Windows รุ่นเก่าคุณควรใช้ "การฆ่าตัวตาย" แทน
หากข้อมูลค่าคือ "การฆ่าตัวตาย" NSSM จะจำลองความผิดพลาดและออกโดยไม่ต้องแจ้งผู้จัดการบริการ ตัวเลือกนี้ควรใช้สำหรับระบบ pre-vista เท่านั้นที่คุณต้องการใช้การดำเนินการกู้คืนบริการ โปรดทราบว่าหากแอปพลิเคชันที่ได้รับการตรวจสอบออกจากรหัส 0, NSSM จะให้เกียรติเฉพาะการร้องขอการฆ่าตัวตายหากคุณกำหนดค่าคีย์รีจิสทรีอย่างชัดเจนสำหรับรหัสออก 0. หากการดำเนินการเริ่มต้นเท่านั้นที่ถูกตั้งค่าเป็น NSSM ฆ่าตัวตายจะออกอย่างสง่างาม
NSSM สามารถตั้งค่าคลาสลำดับความสำคัญของแอปพลิเคชันที่ได้รับการจัดการ NSSM จะดูในรีจิสทรีภายใต้ HKLM System CurrentControlset Services <service> พารามิเตอร์สำหรับ reg_dword entpriority ค่าที่ถูกต้องสอดคล้องกับอาร์กิวเมนต์กับ setPriorityClass () หาก AppPriority () หายไปหรือไม่ถูกต้องแอปพลิเคชันจะเปิดตัวด้วยลำดับความสำคัญปกติ
NSSM สามารถตั้งค่า CPU Affinity ของแอปพลิเคชันที่ได้รับการจัดการ NSSM จะดูในรีจิสทรีภายใต้ HKLM System CurrentControlset Services <Service> พารามิเตอร์สำหรับ appaffinity รายการ reg_sz ควรระบุรหัสโปรเซสเซอร์ที่แยกออกจากเครื่องหมายจุลภาค ช่วงของโปรเซสเซอร์อาจมีการระบุด้วยเส้นประ ไม่อนุญาตให้ใช้อักขระอื่นในสตริง
ตัวอย่างเช่นเพื่อระบุสิ่งแรก; ที่สอง; ซีพียูที่สามและห้าแอปเพอฟฟ์ที่เหมาะสมจะเป็น 0-2,4
หาก Appaffinity หายไปหรือไม่ถูกต้อง NSSM จะไม่พยายาม จำกัด แอปพลิเคชันเป็นซีพียูที่เฉพาะเจาะจง
โปรดทราบว่า NSSM รุ่น 64 บิตสามารถกำหนดค่าสูงสุด 64 ซีพียูด้วยวิธีนี้และเวอร์ชัน 32 บิตสามารถกำหนดค่าสูงสุด 32 ซีพียูได้แม้จะทำงานบนหน้าต่าง 64 บิต
เมื่อหยุดการบริการ NSSM จะพยายามหลายวิธีในการฆ่าแอปพลิเคชันที่ตรวจสอบซึ่งแต่ละวิธีสามารถปิดใช้งานได้หากจำเป็น
First NSSM จะพยายามสร้างเหตุการณ์ CONTROL-C และส่งไปยังคอนโซลของแอปพลิเคชัน สคริปต์แบทช์หรือแอปพลิเคชันคอนโซลอาจสกัดกั้นเหตุการณ์และปิดตัวเองอย่างสง่างาม แอปพลิเคชัน GUI ไม่มีคอนโซลและจะไม่ตอบสนองต่อวิธีนี้
ประการที่สอง NSSM จะระบุหน้าต่างทั้งหมดที่สร้างโดยแอปพลิเคชันและส่งข้อความ WM_Close เพื่อขอทางออกที่สง่างาม
ประการที่สาม NSSM จะระบุเธรดทั้งหมดที่สร้างโดยแอปพลิเคชันและส่งข้อความ WM_QUIT เพื่อขอทางออกที่สง่างาม ไม่ใช่เธรดของแอปพลิเคชันทั้งหมดที่มีคิวข้อความ ผู้ที่ไม่ตอบสนองต่อวิธีนี้
ในที่สุด NSSM จะเรียกว่า TerminateProcess () เพื่อขอให้ระบบปฏิบัติการบังคับให้ยกเลิกแอปพลิเคชัน ไม่สามารถถูกขังหรือถูกละเว้นได้ดังนั้นในสถานการณ์ส่วนใหญ่แอปพลิเคชันจะถูกฆ่า อย่างไรก็ตามไม่มีการรับประกันว่ามันจะมีโอกาสที่จะดำเนินการ tidyup ใด ๆ ก่อนที่จะออก
วิธีการใด ๆ ข้างต้นใด ๆ หรือทั้งหมดอาจถูกปิดใช้งาน NSSM จะค้นหา HKLM System CurrentControlset Services <Service> Parameters AppStopMethodskip registry ซึ่งควรตั้งค่าประเภท reg_dword เป็นฟิลด์บิตอธิบายว่าวิธีการใดที่ไม่ควรใช้
หาก AppStopMethodskip มี 1 เหตุการณ์การควบคุม C จะไม่ถูกสร้างขึ้น หาก AppStopMethodskip มี 2 ข้อความ WM_CLOSE จะไม่ถูกโพสต์ หาก AppStopMethodskip มี 4 ข้อความ WM_QUIT จะไม่ถูกโพสต์ หาก AppStopMethodskip รวมถึง 8 จะไม่ถูกเรียกใช้ ()
ตัวอย่างเช่นหากคุณรู้ว่าแอปพลิเคชันไม่ตอบสนองต่อเหตุการณ์ควบคุม C และไม่มีคิวข้อความเธรดคุณสามารถตั้งค่า AppStopMethodskip เป็น 5 และ NSSM จะไม่พยายามใช้วิธีการเหล่านั้นเพื่อหยุดแอปพลิเคชัน
ดูแลเป็นอย่างดีเมื่อรวม 8 ในคุณค่าของ appstopmethodskip หาก NSSM ไม่ได้เรียกว่า TerminateProcess () เป็นไปได้ว่าแอปพลิเคชันจะไม่ออกเมื่อบริการหยุด
โดยค่าเริ่มต้น NSSM จะอนุญาตให้กระบวนการ 1500ms ตอบสนองต่อแต่ละวิธีที่อธิบายไว้ข้างต้นก่อนที่จะดำเนินการต่อไปยังกระบวนการถัดไป การหมดเวลาสามารถกำหนดค่าได้ตามหลักวิธีการสร้างรายการ reg_dword ในรีจิสทรีภายใต้ hklm system currentcontrolset services <service> พารามิเตอร์
appstopMethodconsole appstopmethodwindow appstopmethodthreads
แต่ละค่าควรตั้งค่าเป็นจำนวนมิลลิวินาทีเพื่อรอ โปรดทราบว่าการหมดเวลาใช้กับแต่ละกระบวนการในแผนผังกระบวนการของแอปพลิเคชันดังนั้นเวลาในการปิดระบบจริงอาจยาวกว่าผลรวมของการหมดเวลาที่กำหนดค่าทั้งหมดหากแอปพลิเคชันวางไข่หลายกระบวนการย่อย
หากต้องการข้ามการใช้วิธีการหยุดข้างต้นกับกระบวนการทั้งหมดในแผนผังกระบวนการของแอปพลิเคชันให้ใช้กับกระบวนการแอปพลิเคชันดั้งเดิมเท่านั้นให้ตั้งค่า HKLM System CurrentControlset Services <Service> Parameters AppKillProcessTree
โดยค่าเริ่มต้น NSSM จะสร้างหน้าต่างคอนโซลเพื่อให้แอปพลิเคชันที่สามารถอ่านอินพุตผู้ใช้สามารถทำได้ - ภายใต้บริการที่ได้รับอนุญาตให้โต้ตอบกับเดสก์ท็อป
การสร้างคอนโซลสามารถระงับได้โดยการตั้งค่าจำนวนเต็ม (reg_dword) hklm system currentcontrolset services <service> parameters appnoconsole registry ค่าเป็น 1
NSSM สามารถเปลี่ยนเส้นทาง I/O ของแอปพลิเคชันที่ได้รับการจัดการไปยังเส้นทางใด ๆ ที่สามารถเปิดโดย CreateFile () ตัวอย่างเช่นการจับภาพการบันทึกเอาต์พุตของแอปพลิเคชันซึ่งจะเขียนลงในคอนโซลเท่านั้นหรือรับอินพุตจากพอร์ตอนุกรม
NSSM จะดูในรีจิสทรีภายใต้ HKLM System CurrentControlset Services <Service> พารามิเตอร์สำหรับคีย์ที่สอดคล้องกับอาร์กิวเมนต์เพื่อสร้างไฟล์ () ทั้งหมดเป็นทางเลือก หากไม่มีเส้นทางสำหรับสตรีมเฉพาะมันจะไม่ถูกเปลี่ยนเส้นทาง หากมีเส้นทางที่ได้รับ แต่ค่าอื่น ๆ จะถูกละเว้นพวกเขาจะได้รับค่าเริ่มต้นที่สมเหตุสมผล
Appstdin: เส้นทางที่จะรับอินพุต Appstdout: เส้นทางที่จะรับเอาต์พุต Appstderr: Path to รับเอาต์พุตข้อผิดพลาด
พารามิเตอร์สำหรับ createFile () กำลังจัดหา "AppstDinSharemode", "AppstDincreationDisposition" และ "AppstDinFlagSandattributes" (และแบบอะนาล็อกสำหรับ stdout และ stderr)
โดยทั่วไปหากคุณต้องการให้บริการบันทึกเอาต์พุตให้ตั้งค่า appstdout และ appstderr ไปยังเส้นทางเดียวกันเช่น C: users public service.log และควรใช้งานได้ อย่างไรก็ตามโปรดจำไว้ว่าผู้ใช้จะต้องเข้าถึงเส้นทางที่ใช้บริการ
เมื่อใช้การเปลี่ยนเส้นทาง I/O NSSM สามารถหมุนไฟล์เอาต์พุตที่มีอยู่ก่อนที่จะเปิด stdout และ/หรือ stderr ไฟล์ที่มีอยู่จะถูกเปลี่ยนชื่อด้วยคำต่อท้ายตามเวลาเขียนสุดท้ายของไฟล์เป็นความแม่นยำมิลลิวินาที ตัวอย่างเช่นไฟล์ nssm.log อาจหมุนไปที่ NSSM-20131221T113939.457.log
NSSM จะดูในรีจิสทรีภายใต้ HKLM System CurrentControlset Services <Service> พารามิเตอร์สำหรับรายการ reg_dword ซึ่งควบคุมการหมุนที่เกิดขึ้น
หาก ApprotateFiles หายไปหรือตั้งค่าเป็น 0 การหมุนจะถูกปิดใช้งาน ค่าที่ไม่เป็นศูนย์ใด ๆ ช่วยให้สามารถหมุนได้
หาก Approtateseconds ไม่ใช่ศูนย์ไฟล์จะไม่หมุนหากเวลาการเขียนครั้งสุดท้ายน้อยกว่าจำนวนวินาทีที่กำหนดในอดีต
หาก ApprotateBytes ไม่ใช่ศูนย์ไฟล์จะไม่หมุนหากมีขนาดเล็กกว่าจำนวนไบต์ที่กำหนด ขนาดไฟล์ 64 บิตสามารถจัดการได้โดยการตั้งค่าที่ไม่เป็นศูนย์ของ ApprotateByTeshigh
หาก ApplatedElay ไม่ใช่ศูนย์ NSSM จะหยุดชั่วคราวสำหรับจำนวนมิลลิวินาทีที่กำหนดหลังจากการหมุน
หาก appstdoutcopyandtruncate หรือ appstderrcopyandtruncate ไม่เป็นศูนย์ไฟล์ stdout (หรือ stderr ตามลำดับ) ไฟล์จะถูกหมุนโดยการทำสำเนาไฟล์ก่อนจากนั้นการตัดทอนไฟล์ต้นฉบับเป็นขนาดศูนย์ สิ่งนี้ช่วยให้ NSSM หมุนไฟล์ที่เปิดโดยกระบวนการอื่น ๆ ป้องกันไม่ให้ MoveFile () ประสบความสำเร็จ โปรดทราบว่ากระบวนการคัดลอกอาจใช้เวลาพอสมควรหากไฟล์มีขนาดใหญ่และจะใช้พื้นที่ดิสก์มากเป็นสองเท่าชั่วคราวเป็นไฟล์ต้นฉบับ โปรดทราบว่าแอปพลิเคชันที่อ่านไฟล์บันทึกอาจไม่สังเกตเห็นว่าขนาดไฟล์เปลี่ยนไป การใช้ตัวเลือกนี้ร่วมกับ ApprotatedElay อาจช่วยได้ในกรณีนั้น
การหมุนเป็นอิสระจากพารามิเตอร์ createFile () ที่ใช้ในการเปิดไฟล์ พวกเขาจะหมุนโดยไม่คำนึงว่า NSSM จะต่อท้ายหรือแทนที่พวกเขา
NSSM ยังสามารถหมุนไฟล์ที่มีขีด จำกัด ขนาดที่กำหนดค่าไว้ในขณะที่บริการกำลังทำงานอยู่ นอกจากนี้คุณสามารถกระตุ้นการหมุนตามความต้องการโดยเรียกใช้คำสั่ง
nssm rotate <servicename>
การหมุนตามความต้องการจะเกิดขึ้นหลังจากอ่านข้อมูลบรรทัดถัดไปจากแอปพลิเคชันที่มีการจัดการโดยไม่คำนึงถึงมูลค่าของ ApprotateBytes โปรดทราบว่าหากแอปพลิเคชันไม่ได้เป็นคำสั่งโดยเฉพาะการหมุนอาจไม่เกิดขึ้นในบางครั้ง
หากต้องการเปิดใช้งานการหมุนออนไลน์และตามความต้องการให้ตั้งค่า ApprotateOnline เป็นค่าที่ไม่เป็นศูนย์
โปรดทราบว่าการหมุนออนไลน์ต้องการ NSSM เพื่อสกัดกั้น I/O ของแอปพลิเคชันและสร้างไฟล์เอาต์พุตในนามของมัน สิ่งนี้ซับซ้อนและผิดพลาดได้ง่ายกว่าการเปลี่ยนเส้นทางสตรีม I/O ก่อนที่จะเปิดตัวแอปพลิเคชัน ดังนั้นการหมุนออนไลน์จึงไม่ได้เปิดใช้งานโดยค่าเริ่มต้น
เมื่อเปลี่ยนเส้นทางเอาท์พุท NSSM สามารถนำหน้าเอาต์พุตแต่ละบรรทัดด้วยการประทับเวลาความแม่นยำมิลลิวินาทีเช่น:
2016-09-06 10:17:09.451 Pipeline main started
หากต้องการเปิดใช้งานคำนำหน้าการประทับเวลาให้ตั้งค่า apptimestamplog เป็นค่าที่ไม่ใช่ศูนย์
คำนำหน้าใช้กับทั้ง stdout และ stderr คำนำหน้าต้องสกัดกั้น I/O ของแอปพลิเคชันในลักษณะเดียวกับที่การหมุนออนไลน์ทำ หากเปิดใช้งานการหมุนบันทึกและการเปิดใช้งานการประทับเวลาการเปิดใช้งานการหมุนจะออนไลน์
NSSM สามารถแทนที่หรือต่อท้ายสภาพแวดล้อมของแอปพลิเคชันที่ได้รับการจัดการ ค่ารีจิสทรีหลายค่าหลายค่า (reg_multi_sz) ได้รับการยอมรับภายใต้ hklm system currentcontrolset services <service> พารามิเตอร์
Appenvironment กำหนดรายการตัวแปรสภาพแวดล้อมซึ่งจะแทนที่สภาพแวดล้อมของบริการ AppenvironmentExtra กำหนดรายการตัวแปรสภาพแวดล้อมซึ่งจะถูกเพิ่มเข้าไปในสภาพแวดล้อมของบริการ
แต่ละรายการในรายการควรเป็นของคีย์แบบฟอร์ม = ค่า เป็นไปได้ที่จะละเว้นค่า แต่สัญลักษณ์ = เป็นข้อบังคับ
ตัวแปรสภาพแวดล้อมที่ระบุไว้ในทั้ง appenvironment และ appenvironmentExtra ขึ้นอยู่กับการขยายตัวปกติดังนั้นจึงเป็นไปได้เช่นเพื่ออัปเดตเส้นทางระบบโดยการตั้งค่า "path = c: bin;%path%" ใน appenvironmentextra ตัวแปรจะขยายตามลำดับที่ปรากฏดังนั้นหากคุณต้องการรวมค่าของตัวแปรหนึ่งในตัวแปรอื่นคุณควรประกาศการพึ่งพาก่อน
เนื่องจากตัวแปรที่กำหนดไว้ใน Appenvironment แทนที่สภาพแวดล้อมที่มีอยู่จึงเป็นไปไม่ได้ที่จะอ้างถึงตัวแปรใด ๆ ที่กำหนดไว้ก่อนหน้านี้
ตัวอย่างเช่นบล็อก appenvironment ต่อไปนี้:
PATH=C:WindowsSystem32;C:Windows
PATH=C:bin;%PATH%
จะส่งผลให้เส้นทางของ "c: bin; c: windows system32; c: windows" ตามที่คาดไว้
ในขณะที่บล็อก appenvironment ต่อไปนี้:
PATH=C:bin;%PATH%
จะส่งผลให้เส้นทางที่มีเฉพาะ C: bin และอาจทำให้แอปพลิเคชันไม่สามารถเริ่มต้นได้
คนส่วนใหญ่จะต้องการใช้ AppenvironmentExtra โดยเฉพาะ Srvany รองรับ Appenvironment เท่านั้น
ในรุ่น 2.25, NSSM Parses Appenvironment และ AppenvironmentExtra เองก่อนที่จะอ่านค่ารีจิสทรีอื่น ๆ ดังนั้นจึงเป็นไปได้ที่จะอ้างถึงตัวแปรสภาพแวดล้อมที่กำหนดเองในแอปพลิเคชัน, AppDirectory และพารามิเตอร์อื่น ๆ
บริการ Windows ทั้งหมดสามารถส่งผ่านตัวแปรสภาพแวดล้อมเพิ่มเติมได้โดยการสร้างค่ารีจิสทรีที่มีค่าหลายค่า (reg_multi_sz) ชื่อ HLKM System CurrentControlset Services <Service> environment
เนื้อหาของบล็อกสภาพแวดล้อมนี้จะถูกรวมเข้ากับสภาพแวดล้อมของระบบก่อนที่บริการจะเริ่ม
อย่างไรก็ตามโปรดทราบว่าสภาพแวดล้อมที่ผสานจะถูกจัดเรียงตามตัวอักษรก่อนที่จะถูกประมวลผล ซึ่งหมายความว่าในทางปฏิบัติคุณไม่สามารถตั้งค่าตัวอย่างเช่น DIR =%programfiles%ในบล็อกสภาพแวดล้อมเนื่องจากสภาพแวดล้อมที่ส่งไปยังบริการจะไม่ได้กำหนด%programfiles%ตามเวลาที่กำหนด%dir% ตัวแปรสภาพแวดล้อมที่กำหนดไว้ใน AppenvironmentExtra ไม่ได้รับผลกระทบจากข้อ จำกัด นี้
ตั้งแต่เวอร์ชัน 2.25 NSSM สามารถรับและตั้งค่าบล็อกสภาพแวดล้อมโดยใช้คำสั่งคล้ายกับ:
nssm get <servicename> Environment
เป็นเรื่องที่คุ้มค่าที่จะย้ำว่าบล็อกสภาพแวดล้อมมีให้บริการ Windows ทั้งหมดไม่ใช่แค่บริการ NSSM
สภาพแวดล้อม NSSM ส่งผ่านไปยังแอปพลิเคชันขึ้นอยู่กับว่าค่ารีจิสทรีต่างๆได้รับการกำหนดค่าอย่างไร โฟลว์ต่อไปนี้อธิบายถึงวิธีการแก้ไขสภาพแวดล้อม
โดยค่าเริ่มต้น: บริการสืบทอดสภาพแวดล้อมของระบบ
หาก environment ถูกกำหนด: เนื้อหาของสภาพแวดล้อมถูกรวมเข้ากับสภาพแวดล้อม
ถ้า parameters appenvironment ถูกกำหนด: บริการสืบทอดสภาพแวดล้อมที่ระบุใน Appenvironment
ถ้า parameters appenvironmentExtra ถูกกำหนด: เนื้อหาของ AppenvironmentExtra จะถูกผนวกเข้ากับสภาพแวดล้อม
โปรดทราบว่า appenvironment แทนที่สภาพแวดล้อมของระบบและบล็อกสภาพแวดล้อมที่ผสาน โปรดทราบว่า AppenvironmentExtra รับประกันว่าจะผนวกเข้ากับสภาพแวดล้อมเริ่มต้นหากมีการกำหนดไว้
NSSM สามารถเรียกใช้คำสั่งที่ผู้ใช้กำหนดค่าได้ในการตอบสนองต่อเหตุการณ์แอปพลิเคชัน คำสั่งเหล่านี้เรียกว่า "hooks" ด้านล่าง
ตะขอทั้งหมดเป็นตัวเลือก ตะขอใด ๆ ที่เรียกใช้จะเปิดตัวกับสภาพแวดล้อมที่กำหนดค่าสำหรับบริการ NSSM จะวางตัวแปรเพิ่มเติมไว้ในสภาพแวดล้อมที่ตะขอสามารถสอบถามเพื่อเรียนรู้วิธีการและเหตุผลที่พวกเขาถูกเรียก
ตะขอถูกจัดหมวดหมู่ตามเหตุการณ์และการกระทำ ตะขอบางตัวทำงานแบบซิงโครนัสและบางตัวก็ทำงานแบบอะซิงโครนัส Hooks นำหน้าด้วย Asterisk *Asterisk จะทำงานแบบซิงโครนัส NSSM จะรอให้ตะขอเหล่านี้เสร็จสมบูรณ์ก่อนที่จะทำงานต่อไป อย่างไรก็ตามโปรดทราบว่าตะขอทั้งหมดอยู่ภายใต้กำหนดเวลาหลังจากนั้นพวกเขาจะถูกฆ่าโดยไม่คำนึงว่าพวกเขาจะทำงานแบบอะซิงโครนัสหรือไม่
เหตุการณ์: เริ่มต้น - ทริกเกอร์เมื่อมีการร้องขอให้บริการเริ่มต้น *การกระทำ: ก่อน - เรียกก่อน NSSM พยายามเปิดแอปพลิเคชัน การดำเนินการ: โพสต์ - เรียกหลังจากแอปพลิเคชันเริ่มสำเร็จ
เหตุการณ์: หยุด - ทริกเกอร์เมื่อมีการร้องขอให้หยุดบริการ *การกระทำ: ก่อน - เรียกก่อนที่ NSSM พยายามฆ่าแอปพลิเคชัน
เหตุการณ์: ออก - ทริกเกอร์เมื่อแอปพลิเคชันออก *การกระทำ: โพสต์ - เรียกว่าหลังจาก NSSM ได้ทำความสะอาดแอปพลิเคชันแล้ว
เหตุการณ์: หมุน - ทริกเกอร์เมื่อมีการร้องขอการหมุนบันทึกออนไลน์ *การกระทำ: ก่อน - เรียกก่อน NSSM หมุนบันทึก การดำเนินการ: โพสต์ - เรียกว่าหลังจาก NSSM หมุนบันทึก
เหตุการณ์: การดำเนินการพลังงาน: การเปลี่ยนแปลง - เรียกว่าเมื่อสถานะพลังงานของระบบเปลี่ยนไป การดำเนินการ: ดำเนินการต่อ - เรียกว่าเมื่อระบบกลับมาทำงานต่อจากสแตนด์บาย
โปรดทราบว่าไม่มีตะขอหยุด/โพสต์ นี่เป็นเพราะทางออก/โพสต์ถูกเรียกเมื่อแอปพลิเคชันออกโดยไม่คำนึงว่ามันจะตอบสนองต่อคำขอปิดการบริการหรือไม่ Stop/Pre เรียกว่าก่อนที่จะพยายามปิดตัวลงอย่างสง่างาม
NSSM ตั้งค่าตัวแปรสภาพแวดล้อม NSSM_HOOK_VERSION เป็นจำนวนบวก ตะขอสามารถตรวจสอบค่าของหมายเลขเพื่อพิจารณาว่าตัวแปรสภาพแวดล้อมอื่นใดที่มีอยู่
หาก NSSM_HOOK_VERSION 1 หรือมากกว่าตัวแปรเหล่านี้จะถูกจัดเตรียมไว้:
NSSM_EXE - เส้นทางไปยัง NSSM เอง NSSM_Configuration - สร้างข้อมูลสำหรับการดำเนินการ NSSM เช่นการดีบัก 64 บิต NSSM_VERSION - เวอร์ชันของ NSSM ปฏิบัติการ NSSM_BUILD_DATE - สร้างวันที่ของ NSSM NSSM_PID - รหัสกระบวนการของการทำงานของ NSSM ที่เรียกใช้ NSSM_Deadline - จำนวนกำหนดเวลาของมิลลิวินาทีหลังจากนั้น NSSM จะฆ่าตะขอหากยังคงทำงานอยู่ NSSM_SERVICE_NAME - ชื่อของบริการที่ควบคุมโดย NSSM NSSM_SERVICE_DISPLAYNAME - แสดงชื่อของบริการ NSSM_COMMAND_LINE - บรรทัดคำสั่งที่ใช้ในการเรียกใช้แอปพลิเคชัน NSSM_APPLICINT_PID - รหัสกระบวนการของกระบวนการแอปพลิเคชันหลัก อาจว่างเปล่าหากกระบวนการไม่ทำงาน NSSM_EVENT - คลาสเหตุการณ์ทริกเกอร์เบ็ด NSSM_ACTION - การกระทำของเหตุการณ์ทริกเกอร์เบ็ด NSSM_TRIGGER - การควบคุมบริการทริกเกอร์ตะขอ อาจว่างเปล่าหากตะขอไม่ได้ถูกกระตุ้นโดยการควบคุมบริการเช่นออก/โพสต์ NSSM_LAST_CONTROL - การควบคุมบริการล่าสุดที่จัดการโดย NSSM NSSM_START_REQUESTED_COUNT - จำนวนครั้งที่แอปพลิเคชันถูกขอให้เริ่ม NSSM_START_COUNT - จำนวนครั้งที่แอปพลิเคชันเริ่มต้นสำเร็จ NSSM_THROTTLE_COUNT - จำนวนครั้งที่แอปพลิเคชันวิ่งน้อยกว่าระยะเวลาเค้น รีเซ็ตเป็นศูนย์ในการเริ่มต้นที่ประสบความสำเร็จหรือเมื่อบริการไม่ได้ใช้อย่างชัดเจน NSSM_EXIT_COUNT - จำนวนครั้งที่แอปพลิเคชันออก NSSM_EXITCODE - รหัสออกของแอปพลิเคชัน อาจว่างเปล่าหากแอปพลิเคชันยังคงทำงานอยู่หรือยังไม่ได้เริ่ม NSSM_RUNTIME - จำนวนมิลลิวินาทีซึ่งการดำเนินการของ NSSM นั้นทำงานอยู่ NSSM_APPLICATION_RUNTIME - จำนวนมิลลิวินาทีซึ่งแอปพลิเคชันได้ทำงานมาตั้งแต่เริ่มสุดท้าย อาจว่างเปล่าหากแอปพลิเคชันยังไม่ได้เริ่มต้น
NSSM เวอร์ชันในอนาคตอาจให้ตัวแปรสภาพแวดล้อมมากขึ้นซึ่งในกรณีนี้ NSSM_Hook_Version จะถูกตั้งค่าเป็นจำนวนที่สูงขึ้น
ตะขอได้รับการกำหนดค่าโดยการสร้างค่าสตริง (reg_expand_sz) ในรีจิสทรีที่ตั้งชื่อตามการกระทำของ Hook และวางไว้ภายใต้ HKLM System CurrentControlset Services <Service> Parameters AppEvents <ventive>
ตัวอย่างเช่นบริการสามารถกำหนดค่าให้รีสตาร์ทเมื่อระบบดำเนินการต่อจากสแตนด์บายโดยการตั้งค่า appevents power resume เป็น:
%NSSM_EXE% restart %NSSM_SERVICE_NAME%
หากต้องการตั้งค่าตะขอบนบรรทัดคำสั่งให้ใช้
nssm set <servicename> AppEvents <event>/<action> <command>
โปรดทราบว่า NSSM จะยกเลิกการเริ่มต้นของแอปพลิเคชันหากการเริ่มต้น/พรีเบ็ดส่งคืนรหัสออกจาก 99
โดยปกติบริการจะเรียกใช้ hooks ตามลำดับต่อไปนี้:
เริ่ม/เริ่มต้น/เริ่มต้น/โพสต์หยุด/ออกก่อน/โพสต์
หากแอปพลิเคชันล่มและเริ่มต้นใหม่โดย NSSM คำสั่งซื้ออาจเป็น:
เริ่มต้น/เริ่มต้น/โพสต์ออก/โพสต์เริ่มต้น/ก่อนเริ่ม/โพสต์หยุด/ออกก่อน/โพสต์
หาก NSSM กำลังเปลี่ยนเส้นทาง stdout หรือ stderr สามารถกำหนดค่าเพื่อเปลี่ยนเส้นทางเอาต์พุตของตะขอใด ๆ ที่ทำงาน ตั้งค่า appredirecthooks เป็น 1 เพื่อเปิดใช้งานฟังก์ชั่นนั้น แน่นอนเบ็ดสามารถเปลี่ยนเส้นทาง I/O ของตัวเองได้โดยอิสระจาก NSSM
NSSM สามารถแก้ไขการตั้งค่าของบริการที่มีอยู่ด้วย GUI เดียวกันกับที่ใช้ในการติดตั้ง วิ่ง
nssm edit <servicename>
เพื่อนำ GUI ขึ้นมา
NSSM เสนอความสามารถในการแก้ไขที่ จำกัด สำหรับบริการอื่น ๆ นอกเหนือจากที่เรียกใช้ NSSM เอง เมื่อ NSSM ถูกขอให้แก้ไขบริการที่ไม่มีการตั้งค่าแอป* รีจิสทรีที่อธิบายไว้ข้างต้น GUI จะอนุญาตให้แก้ไขการตั้งค่าระบบเท่านั้นเช่นชื่อการแสดงผลบริการและคำอธิบาย
NSSM สามารถดึงหรือตั้งค่าพารามิเตอร์บริการแต่ละตัวจากบรรทัดคำสั่ง โดยทั่วไปไวยากรณ์มีดังนี้แม้ว่าดูด้านล่างสำหรับข้อยกเว้น
nssm get <servicename> <parameter>
nssm set <servicename> <parameter> <value>
พารามิเตอร์สามารถรีเซ็ตเป็นค่าเริ่มต้นของพวกเขา
nssm reset <servicename> <parameter>
ชื่อพารามิเตอร์ที่รับรู้โดย NSSM นั้นเหมือนกับชื่อรายการรีจิสทรีที่อธิบายไว้ข้างต้นเช่น AppDirectory
NSSM เสนอความสามารถในการแก้ไขที่ จำกัด สำหรับบริการอื่น ๆ นอกเหนือจากที่เรียกใช้ NSSM เอง พารามิเตอร์ที่ได้รับการยอมรับมีดังนี้:
คำอธิบาย: คำอธิบายบริการ DisplayName: บริการแสดงบริการ สภาพแวดล้อม: สภาพแวดล้อมที่รวมเข้าด้วยกัน ImagePath: เส้นทางไปยังบริการที่สามารถดำเนินการได้ ObjectName: บัญชีผู้ใช้ที่เรียกใช้บริการ ชื่อ: บริการคีย์บริการ เริ่มต้น: ประเภทการเริ่มต้นบริการ ประเภท: ประเภทบริการ
สิ่งเหล่านี้สอดคล้องกับค่ารีจิสทรีภายใต้คีย์ของบริการ HKLM System CurrentControlset Services <Service>
โปรดทราบว่า NSSM จะเชื่อมโยงอาร์กิวเมนต์ทั้งหมดที่ส่งผ่านบนบรรทัดคำสั่งด้วยช่องว่างเพื่อสร้างค่าให้ตั้งค่า ดังนั้นการเรียกร้องสองครั้งต่อไปนี้จะมีผลเหมือนกัน
nssm set <servicename> Description "NSSM managed service"
nssm set <servicename> Description NSSM managed service
appenvironment, appenvironmentExtra และพารามิเตอร์สภาพแวดล้อมรับรู้ถึงข้อโต้แย้งเพิ่มเติมเมื่อสอบถามสภาพแวดล้อม ไวยากรณ์ต่อไปนี้จะพิมพ์ตัวแปรสภาพแวดล้อมพิเศษทั้งหมดที่กำหนดค่าสำหรับบริการ
nssm get <servicename> AppEnvironmentExtra
ในขณะที่ไวยากรณ์ด้านล่างจะพิมพ์เฉพาะค่าของตัวแปร classpath หากมีการกำหนดค่าในบล็อกสภาพแวดล้อมหรือสตริงว่างถ้าไม่ได้กำหนดค่า
nssm get <servicename> AppEnvironmentExtra CLASSPATH
เมื่อตั้งค่าบล็อกสภาพแวดล้อมแต่ละตัวแปรควรระบุเป็นคู่คีย์ = ค่าในอาร์กิวเมนต์บรรทัดคำสั่งแยกต่างหาก ตัวอย่างเช่น:
nssm set <servicename> AppEnvironment CLASSPATH=C:Classes TEMP=C:Temp
อีกทางเลือกหนึ่งคีย์สามารถนำหน้าด้วย A + หรือ - สัญลักษณ์เพื่อเพิ่มหรือลบคู่ออกจากบล็อก
สองบรรทัดต่อไปนี้ตั้งค่า classpath และ temp:
nssm set <servicename> AppEnvironment CLASSPATH=C:Classes
nssm set <servicename> AppEnvironment +TEMP=C:Temp
หากคีย์มีอยู่แล้วการระบุ +คีย์จะแทนที่ค่าในขณะที่รักษาลำดับของคีย์:
nssm set <servicename> AppEnvironment +CLASSPATH=C:NewClasses
ไวยากรณ์ต่อไปนี้จะลบตัวแปรเดียวออกจากบล็อกในขณะที่ทิ้งตัวแปรอื่น ๆ ไว้
nssm set <servicename> AppEnvironment -TEMP
การระบุ -key = value จะลบตัวแปรเฉพาะเมื่อค่าที่มีอยู่ตรงกับ
ไวยากรณ์ต่อไปนี้จะไม่ลบอุณหภูมิ = c: temp
nssm set <servicename> AppEnvironment -TEMP=C:WorkTemporary
สัญลักษณ์ + และ - เป็นอักขระที่ถูกต้องในตัวแปรสภาพแวดล้อม ไวยากรณ์: key = value เทียบเท่ากับ key = value และสามารถใช้ในการตั้งค่าตัวแปรที่เริ่มต้นด้วย +/- หรือเพื่อรีเซ็ตบล็อกในสคริปต์อย่างชัดเจน:
nssm set <servicename> AppEnvironment :CLASSPATH=C:Classes
nssm set <servicename> AppEnvironment +TEMP=C:Temp
พารามิเตอร์ AppExit ต้องการอาร์กิวเมนต์เพิ่มเติมที่ระบุรหัสออกเพื่อรับหรือตั้งค่า การดำเนินการเริ่มต้นสามารถระบุได้ด้วยค่าเริ่มต้นสตริง
ตัวอย่างเช่นเพื่อรับการดำเนินการทางออกเริ่มต้นสำหรับบริการที่คุณควรเรียกใช้
nssm get <servicename> AppExit Default
หากต้องการรับการดำเนินการทางออกเมื่อแอปพลิเคชันออกด้วยรหัสออก 2 ให้เรียกใช้
nssm get <servicename> AppExit 2
โปรดทราบว่าหากไม่มีการกำหนดค่าการกระทำที่ชัดเจนสำหรับรหัสออกที่ระบุ NSSM จะพิมพ์การดำเนินการออกจากค่าเริ่มต้น
หากต้องการตั้งค่ากำหนดค่าบริการให้หยุดเมื่อแอปพลิเคชันออกด้วยรหัสออกเป็น 2 ให้เรียกใช้
nssm set <servicename> AppExit 2 Exit
พารามิเตอร์ AppPriority ใช้เพื่อตั้งค่าคลาสลำดับความสำคัญของแอปพลิเคชันที่มีการจัดการ ลำดับความสำคัญที่ถูกต้องมีดังนี้:
realtime_priority_class high_priority_class obler_normal_priority_class normal_priority_class ด้านล่าง _normal_priority_class idle_priority_class
พารามิเตอร์พึ่งพากลุ่มและพึ่งพาอาศัยการบริการใช้ในการสืบค้นหรือตั้งค่าการอ้างอิงสำหรับบริการ เมื่อการตั้งค่าการพึ่งพาแต่ละบริการหรือกลุ่มบริการ (นำหน้าด้วยสัญลักษณ์ +) ควรระบุในอาร์กิวเมนต์บรรทัดคำสั่งแยกต่างหาก ตัวอย่างเช่น:
nssm set <servicename> DependOnService RpcSs LanmanWorkstation
อีกทางเลือกหนึ่งชื่อการพึ่งพาสามารถนำหน้าด้วยสัญลักษณ์ + หรือ - เพื่อเพิ่มหรือลบการพึ่งพา
สองบรรทัดต่อไปนี้ตั้งค่าการพึ่งพา RPCSS และ LanmanworkStation:
nssm set <servicename> DependOnService RpcSs
nssm set <servicename> DependOnService +LanmanWorkstation
ไวยากรณ์ Follwing ลบการพึ่งพา RPCSS:
nssm set <servicename> DependOnService -RpcSs
กลุ่มบริการควรพูดอย่างเคร่งครัดจะนำหน้าด้วยสัญลักษณ์ + ในการระบุการพึ่งพาเพียงครั้งเดียวในกลุ่มสัญลักษณ์ + สามารถนำหน้าด้วยสัญลักษณ์:
บรรทัดต่อไปนี้เทียบเท่าและแต่ละชุดการพึ่งพาเฉพาะใน netbiosgroup:
nssm set <servicename> DependOnGroup NetBIOSGroup
nssm set <servicename> DependOnGroup :NetBIOSGroup
nssm set <servicename> DependOnGroup :+NetBIOSGroup
ในขณะที่บรรทัดเหล่านี้เพิ่มไปยังการพึ่งพาที่มีอยู่:
nssm set <servicename> DependOnGroup +NetBIOSGroup
nssm set <servicename> DependOnGroup ++NetBIOSGroup
พารามิเตอร์ชื่อสามารถสอบถามได้เท่านั้นไม่ได้ตั้งค่า มันส่งคืนชื่อคีย์รีจิสทรีของบริการ สิ่งนี้อาจเป็นประโยชน์หากคุณใช้ประโยชน์จากความจริงที่ว่าคุณสามารถแทนที่ชื่อที่แสดงของบริการได้ทุกที่ที่ไวยากรณ์เรียกร้อง
พารามิเตอร์ ObjectName ต้องการอาร์กิวเมนต์เพิ่มเติมเฉพาะเมื่อตั้งชื่อผู้ใช้ อาร์กิวเมนต์เพิ่มเติมคือรหัสผ่านของผู้ใช้
เพื่อเรียกคืนชื่อผู้ใช้ Run
nssm get <servicename> ObjectName
หากต้องการตั้งค่าชื่อผู้ใช้และรหัสผ่านให้เรียกใช้
nssm set <servicename> ObjectName <username> <password>
โปรดทราบว่ากฎของการต่อการโต้แย้งการโต้แย้งยังคงมีผลบังคับใช้ การเรียกร้องต่อไปนี้ถูกต้องและจะมีผลกระทบที่คาดหวัง
nssm set <servicename> ObjectName <username> correct horse battery staple
ชื่อผู้ใช้ที่รู้จักกันดีต่อไปนี้ไม่จำเป็นต้องใช้รหัสผ่าน พารามิเตอร์รหัสผ่านสามารถละเว้นได้เมื่อใช้:
"LocalSystem" AKA "System" AKA "NT Authority System" "Localservice" AKA "บริการท้องถิ่น" AKA "NT Authority Local Service" "Networkservice" AKA "Network Service" AKA "NT Authority Network Service
พารามิเตอร์เริ่มต้นใช้ในการสืบค้นหรือตั้งค่าประเภทเริ่มต้นของบริการ ประเภทการเริ่มต้นบริการที่ถูกต้องมีดังนี้:
service_auto_start: การเริ่มต้นอัตโนมัติที่บูต Service_Delayed_Start: เริ่มต้นล่าช้าเมื่อบูต Service_Demand_Start: การเริ่มต้นบริการด้วยตนเอง Service_Disabled: บริการถูกปิดใช้งาน
โปรดทราบว่าไม่รองรับ Service_Delayed_Start ในเวอร์ชันของ Windows ก่อน Vista NSSM จะตั้งค่าบริการเป็นการเริ่มต้นอัตโนมัติหากไม่สามารถเริ่มต้นล่าช้าได้
พารามิเตอร์ประเภทใช้ในการสืบค้นหรือตั้งค่าประเภทบริการ NSSM รับรู้ประเภทบริการที่บันทึกไว้ทั้งหมด แต่จะอนุญาตให้ตั้งค่าหนึ่งในสองประเภทเท่านั้น:
Service_win32_own_process: บริการสแตนด์อโลน นี่คือค่าเริ่มต้น Service_interactive_Process: บริการที่สามารถโต้ตอบกับเดสก์ท็อป
โปรดทราบว่าบริการอาจถูกกำหนดค่าเป็นแบบโต้ตอบเท่านั้นหากทำงานภายใต้บัญชี LocalSystem วิธีที่ปลอดภัยในการกำหนดค่าบริการแบบโต้ตอบมีสองขั้นตอนดังนี้
nssm reset <servicename> ObjectName
nssm set <servicename> Type SERVICE_INTERACTIVE_PROCESS
NSSM มีคุณสมบัติการควบคุมบริการพื้นฐาน
nssm start <servicename>
nssm restart <servicename>
nssm stop <servicename>
nssm status <servicename>
nssm statuscode <servicename>
ผลลัพธ์ของ "สถานะ NSSM" และ "NSSM StatusCode" เป็นสตริงที่แสดงถึงสถานะบริการเช่น Service_running
รหัสทางออกของ "สถานะ NSSM" จะเป็น 0 หากสถานะถูกเรียกคืน หากรหัสออกไม่ใช่ศูนย์มีข้อผิดพลาด
รหัสออกของ "NSSM StatusCode" จะเป็นค่าตัวเลขของสถานะบริการเช่น 4 สำหรับ service_running Zero ไม่ใช่รหัสสถานะบริการที่ถูกต้อง หากรหัสออกเป็นศูนย์มีข้อผิดพลาด
NSSM สามารถลบบริการได้ วิ่ง
nssm remove <servicename>
เพื่อลบบริการ คุณจะได้รับแจ้งสำหรับการยืนยันก่อนที่บริการจะถูกลบออก พยายามอย่าลบบริการระบบที่จำเป็น ...
หากต้องการลบบริการโดยไม่ได้รับการยืนยันจาก GUI ให้เรียกใช้
nssm remove <servicename> confirm
พยายามอย่าลบบริการระบบที่จำเป็น ...
บันทึก NSSM ไปยังบันทึกเหตุการณ์ Windows มันลงทะเบียนตัวเองเป็นแหล่งบันทึกเหตุการณ์และใช้รหัสเหตุการณ์ที่ไม่ซ้ำกันสำหรับข้อความแต่ละประเภทที่บันทึกไว้ เวอร์ชันใหม่อาจเพิ่มประเภทเหตุการณ์ แต่รหัสเหตุการณ์ที่มีอยู่จะไม่เปลี่ยนแปลง
เนื่องจากวิธีที่ NSSM ลงทะเบียนตัวเองคุณควรทราบว่าคุณอาจไม่สามารถแทนที่ NSSM ไบนารีได้หากคุณเปิดตัวชมเหตุการณ์และการใช้ NSSM หลายอินสแตนซ์จากสถานที่ต่าง ๆ อาจทำให้เกิดความสับสนหากไม่ใช่เวอร์ชันเดียวกันทั้งหมด
คำสั่งต่อไปนี้จะพิมพ์ชื่อของบริการทั้งหมดที่จัดการโดย NSSM:
nssm list
หากต้องการดูบริการทั้งหมดในระบบไม่ใช่แค่ของ NSSM ให้ใช้รายการทั้งหมด:
nssm list all
คำสั่งต่อไปนี้จะพิมพ์ ID กระบวนการและเส้นทางการดำเนินการของกระบวนการที่เริ่มต้นโดยบริการที่กำหนด:
nssm processes <servicename>
โปรดทราบว่าหาก NSSM 32 บิตทำงานบนระบบ 64 บิตที่ใช้ Windows รุ่นเก่ากว่า Vista มันจะไม่สามารถสอบถามเส้นทางของกระบวนการ 64 บิตได้
NSSM สามารถทิ้งคำสั่งซึ่งจะสร้างการกำหนดค่าของบริการใหม่ เอาต์พุตสามารถวางลงในสคริปต์แบทช์เพื่อสำรองบริการหรือถ่ายโอนไปยังคอมพิวเตอร์เครื่องอื่น
nssm dump <servicename>
เนื่องจากการกำหนดค่าบริการอาจมีอักขระที่ต้องยกมาหรือหลบหนีจากพรอมต์คำสั่ง NSSM จึงพยายามอย่างหนักในการผลิตผลลัพธ์ซึ่งจะทำงานได้อย่างถูกต้องเมื่อเรียกใช้เป็นสคริปต์โดยการเพิ่มเครื่องหมายคำพูดและการหลบหนีตามความเหมาะสม
เพื่ออำนวยความสะดวกในการคัดลอกบริการคำสั่ง Dump ยอมรับอาร์กิวเมนต์ที่สองซึ่งระบุชื่อของบริการที่จะใช้ในผลลัพธ์
nssm dump <servicename> <newname>
บรรทัดในการถ่ายโอนข้อมูลจะอ้างอิงบริการในขณะที่แสดงการกำหนดค่าของ
ในการติดตั้งเซิร์ฟเวอร์ทัวร์นาเมนต์ที่ไม่เป็นจริง:
nssm install UT2004 c:gamesut2004systemucc.exe server
ในการเรียกใช้เซิร์ฟเวอร์ในฐานะ "เกม" ผู้ใช้:
nssm set UT2004 ObjectName games password
To configure the server to log to a file:
nssm set UT2004 AppStdout c:gamesut2004service.log
To restrict the server to a single CPU:
nssm set UT2004 AppAffinity 0
To remove the server:
nssm remove UT2004 confirm
To find out the service name of a service with a display name:
nssm get "Background Intelligent Transfer Service" Name
NSSM is known to compile with Visual Studio 2008 and later. Older Visual Studio releases may or may not work if you install an appropriate SDK and edit the nssm.vcproj and nssm.sln files to set a lower version number. They are known not to work with default settings.
NSSM will also compile with Visual Studio 2010 but the resulting executable will not run on versions of Windows older than XP SP2. If you require compatiblity with older Windows releases you should change the Platform Toolset to v90 in the General section of the project's Configuration Properties.
Thanks to Bernard Loh for finding a bug with service recovery. Thanks to Benjamin Mayrargue (www.softlion.com) for adding 64-bit support. Thanks to Joel Reingold for spotting a command line truncation bug. Thanks to Arve Knudsen for spotting that child processes of the monitored application could be left running on service shutdown, and that a missing registry value for AppDirectory confused NSSM. Thanks to Peter Wagemans and Laszlo Keresztfalvi for suggesting throttling restarts. Thanks to Eugene Lifshitz for finding an edge case in CreateProcess() and for advising how to build messages.mc correctly in paths containing spaces. Thanks to Rob Sharp for pointing out that NSSM did not respect the AppEnvironment registry value used by srvany. Thanks to Szymon Nowak for help with Windows 2000 compatibility. Thanks to François-Régis Tardy and Gildas le Nadan for French translation. Thanks to Emilio Frini for spotting that French was inadvertently set as the default language when the user's display language was not translated. Thanks to Riccardo Gusmeroli and Marco Certelli for Italian translation. Thanks to Eric Cheldelin for the inspiration to generate a Control-C event on shutdown. Thanks to Brian Baxter for suggesting how to escape quotes from the command prompt. Thanks to Russ Holmann for suggesting that the shutdown timeout be configurable. Thanks to Paul Spause for spotting a bug with default registry entries. Thanks to BUGHUNTER for spotting more GUI bugs. Thanks to Doug Watson for suggesting file rotation. Thanks to Арслан Сайдуганов for suggesting setting process priority. Thanks to Robert Middleton for suggestion and draft implementation of process affinity support. Thanks to Andrew RedzMax for suggesting an unconditional restart delay. Thanks to Bryan Senseman for noticing that applications with redirected stdout and/or stderr which attempt to read from stdin would fail. Thanks to Czenda Czendov for help with Visual Studio 2013 and Server 2012R2. Thanks to Alessandro Gherardi for reporting and draft fix of the bug whereby the second restart of the application would have a corrupted environment. Thanks to Hadrien Kohl for suggesting to disable the console window's menu. Thanks to Allen Vailliencourt for noticing bugs with configuring the service to run under a local user account. Thanks to Sam Townsend for noticing a regression with TerminateProcess(). Thanks to Barrett Lewis for suggesting the option to skip terminating the application's child processes. Thanks to Miguel Angel Terrón for suggesting copy/truncate rotation. Thanks to Yuriy Lesiuk for suggesting setting the environment before querying the registry for parameters. Thanks to Gerald Haider for noticing that installing a service with NSSM in a path containing spaces was technically a security vulnerability. Thanks to Scott Ware for reporting a crash saving the environment on XP 32-bit. Thanks to Stefan and Michael Scherer for reporting a bug writing the event messages source. Thanks to Paul Baxter for help with Visual Studio 2015. Thanks to Mathias Breiner for help with Visual Studio and some registry fixes. Thanks to David Bremner for general tidyups. Thanks to Nabil Redmann for suggesting redirecting hooks' output. Thanks to Bader Aldurai for suggesting the process tree. Thanks to Christian Long for suggesting virtual accounts. Thanks to Marcin Lewandowski for spotting a bug appending to large files. Thanks to Nicolas Ducrocq for suggesting timestamping redirected output. Thanks to Meang Akira Tanaka for suggestion and initial implementation of the statuscode command. Thanks to Kirill Kovalenko for reporting a crash with NANO server. Thanks to Connor Reynolds for spotting a potential buffer overflow. Thanks to foi for spotting a hang with 64 cores.
NSSM is public domain. You may unconditionally use it and/or its source code for any purpose you wish.