อินเทอร์เน็ต. คอมพิวเตอร์. ช่วย. คำแนะนำ. ซ่อมแซม

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

วิธีเรียกใช้แอปพลิเคชันเป็นบริการ Windows

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

NSSM เป็นซอฟต์แวร์โอเพ่นซอร์สฟรี และรองรับระบบปฏิบัติการ Microsoft ทั้งหมดตั้งแต่ Windows 2000 ถึง Windows 8 NSSM ไม่จำเป็นต้องติดตั้ง เพียงดาวน์โหลดและแตกไฟล์ การเผยแพร่ประกอบด้วยเวอร์ชันสำหรับระบบปฏิบัติการ 32- และ 64- บิต คุณสามารถรับโปรแกรมได้จากเว็บไซต์ nssm.cc ซึ่งขณะนี้เวอร์ชันเสถียรล่าสุดคือ 2.21.1 ซึ่งฉันจะใช้

เพื่อสาธิตความสามารถของ NSSM ให้ลองใช้ Windows Notepad เป็นบริการบน Windows 8.1

การสร้างบริการ

เพื่อสร้างบริการที่มีชื่อว่า สมุดบันทึกเปิดคอนโซลคำสั่งไปที่โฟลเดอร์ที่มี NSSM ที่ไม่ได้แพ็ก (สำหรับ Windows 64 บิต) และป้อนคำสั่ง nssm ติดตั้ง notepad ซึ่งจะเปิดหน้าต่างตัวติดตั้งกราฟิก NSSM หากต้องการสร้างบริการ เพียงระบุเส้นทางไปยังไฟล์ปฏิบัติการในช่องเส้นทางแล้วคลิกปุ่ม “ติดตั้งบริการ” นอกจากนี้ ในฟิลด์ตัวเลือก คุณสามารถระบุคีย์ที่จำเป็นในการเริ่มบริการได้

คุณยังสามารถระบุพารามิเตอร์เพิ่มเติมเมื่อสร้างบริการใหม่ได้

แท็บการปิดเครื่องจะแสดงวิธีการปิดเครื่องและการหมดเวลาที่ใช้เมื่อแอปพลิเคชันปิดตัวลงตามปกติหรือขัดข้อง เมื่อ NSSM ได้รับคำสั่งหยุด (เช่น เมื่อปิดแอปพลิเคชัน) NSSM จะพยายามหยุดแอปพลิเคชันที่ได้รับการควบคุมในลักษณะปกติ หากแอปพลิเคชันไม่ตอบสนอง NSSM ก็สามารถบังคับยุติกระบวนการและกระบวนการย่อยทั้งหมดของแอปพลิเคชันนี้ได้

มีสี่ขั้นตอนในการปิดแอปพลิเคชัน และตามค่าเริ่มต้นพวกเขาจะใช้ตามลำดับนี้:

ในระยะแรก NSSM จะพยายามสร้างและส่งกิจกรรม Ctrl+Cวิธีการนี้ใช้งานได้ดีกับแอปพลิเคชันคอนโซลหรือสคริปต์ แต่ไม่สามารถใช้ได้กับแอปพลิเคชันแบบกราฟิก
จากนั้น NSSM จะตรวจจับหน้าต่างทั้งหมดที่สร้างโดยแอปพลิเคชันและส่งข้อความ WM_CLOSE ไปให้พวกเขา ทำให้แอปพลิเคชันออก
ขั้นตอนที่สามคือ NSSM คำนวณเธรดทั้งหมดที่สร้างโดยแอปพลิเคชันและส่งข้อความ WM_QUIT ซึ่งจะได้รับหากแอปพลิเคชันมีคิวข้อความเธรด
ทางเลือกสุดท้าย NSSM สามารถเรียกใช้เมธอด TerminateProcess() เพื่อบังคับให้แอปพลิเคชันยุติการทำงาน

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

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

บนแท็บ "อินพุต/เอาต์พุต (I/O)" คุณสามารถตั้งค่าการเปลี่ยนเส้นทางอินพุต/เอาต์พุตของแอปพลิเคชันไปยังไฟล์ที่ระบุได้

บนแท็บ "สภาพแวดล้อม" คุณสามารถตั้งค่าตัวแปรสภาพแวดล้อมใหม่สำหรับบริการหรือแทนที่ตัวแปรที่มีอยู่ได้

คุณไม่สามารถใช้เชลล์กราฟิกและสร้างบริการในคอนโซลได้ทันทีด้วยคำสั่งต่อไปนี้:

nssm ติดตั้งแผ่นจดบันทึก ″C:\Windows\system32\notepad.exe″

การจัดการบริการ

หลังจากสร้างบริการโดยใช้ NSSM แล้ว ให้ไปที่สแนปอินบริการและค้นหาบริการแผ่นจดบันทึก อย่างที่คุณเห็น ในลักษณะที่ปรากฏ มันไม่แตกต่างจากบริการอื่น ๆ เราสามารถเริ่ม หยุด หรือเปลี่ยนโหมดการเปิดตัวได้ อย่างไรก็ตาม โปรดทราบว่า nssm.exe ถูกแสดงเป็นไฟล์ปฏิบัติการ

และถ้าเราไปที่ Task Manager เราจะเห็นภาพต่อไปนี้: NSSM กำลังทำงานเป็นกระบวนการหลัก (พาเรนต์) บริการ Notepad กำลังทำงานเป็นกระบวนการย่อย และแอปพลิเคชัน Notepad กำลังทำงานอยู่ในกระบวนการย่อยนี้แล้ว

การลบบริการ

หากต้องการลบบริการ ให้ป้อนคำสั่ง nssm Remove Notepad และยืนยันการลบบริการ และโดยการป้อนคำสั่ง nssm ลบ notepad ยืนยัน คุณสามารถทำได้โดยไม่ต้องยืนยัน

เริ่มบริการแบบโต้ตอบ

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

ในการเริ่มบริการในโหมดโต้ตอบ คุณต้องเปิดคุณสมบัติของบริการในสแนปอินบริการและบนแท็บ "เข้าสู่ระบบ" ให้เลือกช่องทำเครื่องหมาย "อนุญาตให้โต้ตอบกับเดสก์ท็อป"

แล้วปาฏิหาริย์ก็เริ่มต้นขึ้น :) บริการที่เปิดตัวในโหมดโต้ตอบจะเปิดขึ้นในเซสชันที่แยกจากกัน (เซสชัน 0) เซสชันนี้สามารถเข้าถึงได้โดยใช้ Interactive Services Detection Service (ui0detect) เท่านั้น ซึ่งจะตรวจสอบการเริ่มต้นของบริการแบบโต้ตอบบนคอมพิวเตอร์และออกการแจ้งเตือน ใน Windows 7\Server 2008 บริการนี้เปิดใช้งานตามค่าเริ่มต้น แต่ใน Windows 8\Server 2012 บริการจะถูกปิดใช้งานและไม่ปรากฏในสแน็ปอินกราฟิกของบริการ (อย่างน้อยฉันก็ไม่พบที่นั่น) นอกจากนี้ หากคุณพบบริการลึกลับนี้และพยายามเริ่มใช้งาน คุณจะได้รับข้อความแสดงข้อผิดพลาด

แต่ความจริงก็คือเพื่อที่จะเรียกใช้ คุณต้องอนุญาตให้บริการแบบโต้ตอบทำงานบนคอมพิวเตอร์ของคุณ ดังนั้น ให้เปิดตัวแก้ไขรีจิสทรี ค้นหาในส่วน HKLM\System\CurrentControlSet\Control\Windows ซึ่งมีชื่อพารามิเตอร์ประเภท DWORD ไม่มีบริการเชิงโต้ตอบและตั้งค่าเป็น 0 .

จากนั้นเปิดคอนโซล PowerShell และเริ่มบริการค้นหาด้วยคำสั่ง:

เริ่มบริการ - ชื่อ ui0detect

หลังจากตรวจสอบให้แน่ใจว่าบริการตรวจจับกำลังทำงานอยู่ เราจะเริ่มบริการแผ่นจดบันทึกอีกครั้ง และเราจะได้หน้าต่างนี้ เลือก “ดูข้อความ”

และเราพบว่าตัวเองอยู่ในเซสชันว่างที่แอปพลิเคชันของเราทำงาน จากนั้นเราดำเนินการที่จำเป็นกับมันแล้วกลับมา

นี่เป็นโซลูชั่นที่น่าสนใจสำหรับการรันแอพพลิเคชั่นเป็นบริการของ Windows ไม่สวยที่สุด แต่ค่อนข้างสอดคล้องกับชื่อ :)

คุณสามารถกำหนดค่าการทำงานของบริการในตัวจัดการ Windows พิเศษได้ หากต้องการเปิดให้ใช้คีย์ผสม Windows + R ป้อน services.msc ในบรรทัดที่ปรากฏขึ้นแล้วกด Enter คุณจะเห็นหน้าต่างเหมือนหรือคล้ายกัน (หากคุณมีระบบปฏิบัติการเวอร์ชันเก่า)

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

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

อย่าปิดใช้งานบริการทั้งหมด แต่ให้สลับเป็นโหมดแมนนวลเท่านั้น

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

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

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

เพื่อให้การเปลี่ยนแปลงมีผล โปรดรีสตาร์ทพีซีของคุณหลังการกำหนดค่า

บริการ Windows ที่สามารถสลับเป็นโหมดแมนนวลได้

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

วินโดวส์ 10

  • ฟังก์ชันการทำงานสำหรับผู้ใช้ที่เชื่อมต่อและการวัดและส่งข้อมูลทางไกล (ประสบการณ์ผู้ใช้ที่เชื่อมต่อและการวัดและส่งข้อมูลทางไกล)
  • บริการติดตามการวินิจฉัย
  • dmwappushsvc.
  • ดาวน์โหลด Maps Manager - หากคุณไม่ได้ใช้แอปพลิเคชัน Maps
  • บริการแป้นพิมพ์สัมผัสและแผงการเขียนด้วยลายมือ
  • บริการ Windows Defender

วินโดว์ 8/8.1

  • บริการนโยบายการวินิจฉัย
  • Distributed Link Tracking Client - หากคอมพิวเตอร์ไม่ได้เชื่อมต่อกับเครือข่ายใดๆ
  • IP Helper - หากคุณไม่ได้ใช้การเชื่อมต่อ IPv6
  • บริการช่วยเหลือความเข้ากันได้ของโปรแกรม
  • Print Spooler - หากคุณไม่มีเครื่องพิมพ์
  • Remote Registry - บริการนี้สามารถปิดการใช้งานได้อย่างสมบูรณ์
  • การเข้าสู่ระบบรอง
  • ศูนย์รักษาความปลอดภัย.
  • โมดูลสนับสนุน NetBIOS ผ่าน TCP/IP (TCP/IP NetBIOS Helper)
  • บริการรายงานข้อผิดพลาดของ Windows
  • Windows Image Acquisition (WIA) - หากคุณไม่มีสแกนเนอร์
  • Windows Search - หากคุณไม่ได้ใช้ Windows Search

วินโดว 7

  • Computer Browser - หากคอมพิวเตอร์ไม่ได้เชื่อมต่อกับเครือข่ายใดๆ
  • บริการนโยบายการวินิจฉัย
  • Distributed Link Tracking Client - หากคอมพิวเตอร์ไม่ได้เชื่อมต่อกับเครือข่ายใดๆ
  • IP Helper - หากคุณไม่ได้ใช้การเชื่อมต่อ IPv6
  • ไฟล์ออฟไลน์
  • บริการแจงนับอุปกรณ์พกพา
  • Print Spooler - หากคุณไม่มีเครื่องพิมพ์
  • พื้นที่เก็บข้อมูลที่ได้รับการป้องกัน
  • Remote Registry - บริการนี้สามารถปิดการใช้งานได้อย่างสมบูรณ์
  • การเข้าสู่ระบบรอง
  • ศูนย์รักษาความปลอดภัย.
  • เซิร์ฟเวอร์ - หากคอมพิวเตอร์ไม่ได้ใช้เป็นเซิร์ฟเวอร์
  • โมดูลสนับสนุน NetBIOS ผ่าน TCP/IP (TCP/IP NetBIOS Helper)
  • บริการรายงานข้อผิดพลาดของ Windows
  • Windows Search - หากคุณไม่ได้ใช้ Windows Search

วินโดวส์วิสต้า

  • Computer Browser - หากคอมพิวเตอร์ไม่ได้เชื่อมต่อกับเครือข่ายใดๆ
  • Desktop Window Manager Session Manager - หากคุณไม่ได้ใช้ธีม Aero
  • บริการนโยบายการวินิจฉัย
  • Distributed Link Tracking Client - หากคอมพิวเตอร์ไม่ได้เชื่อมต่อกับเครือข่ายใดๆ
  • ไฟล์ออฟไลน์
  • บริการแจงนับอุปกรณ์พกพา
  • Print Spooler - หากคุณไม่มีเครื่องพิมพ์
  • เรดดี้บูสท์
  • Remote Registry - บริการนี้สามารถปิดการใช้งานได้อย่างสมบูรณ์
  • การเข้าสู่ระบบรอง
  • ศูนย์รักษาความปลอดภัย.
  • เซิร์ฟเวอร์ - หากคอมพิวเตอร์ไม่ได้ใช้เป็นเซิร์ฟเวอร์
  • บริการป้อนข้อมูลแท็บเล็ตพีซี
  • โมดูลสนับสนุน NetBIOS ผ่าน TCP/IP (TCP/IP NetBIOS Helper)
  • ธีม - หากคุณใช้ธีม Windows แบบคลาสสิก
  • บริการรายงานข้อผิดพลาดของ Windows
  • ตัวเรียกใช้บริการ Windows Media Center
  • Windows Search - หากคุณไม่ได้ใช้ Windows Search

วินโดวส์เอ็กซ์พี

  • ผู้แจ้งเตือน
  • Computer Browser - หากคอมพิวเตอร์ไม่ได้เชื่อมต่อกับเครือข่ายใดๆ
  • Distributed Link Tracking Client - หากคอมพิวเตอร์ไม่ได้เชื่อมต่อกับเครือข่ายใดๆ
  • บริการจัดทำดัชนี - หากคุณไม่ได้ใช้ Windows Search
  • ไฟร์วอลล์อินเทอร์เน็ต (ICF) / การแชร์การเชื่อมต่ออินเทอร์เน็ต (ICS)
  • บริการแมสเซนเจอร์
  • Remote Registry - บริการนี้สามารถปิดการใช้งานได้อย่างสมบูรณ์
  • การเข้าสู่ระบบรอง
  • เซิร์ฟเวอร์ - หากคอมพิวเตอร์ไม่ได้ใช้เป็นเซิร์ฟเวอร์
  • บริการการคืนค่าระบบ
  • โมดูลสนับสนุน NetBIOS ผ่าน TCP/IP (TCP/IP NetBIOS Helper)
  • แหล่งจ่ายไฟสำรอง
  • ตัวจัดการการอัปโหลด
  • การกำหนดค่าไร้สาย (การกำหนดค่าศูนย์ไร้สาย)

อัปเดตล่าสุด: 31/10/2558

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

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

ขั้นแรก เรามาสร้างโปรเจ็กต์ใหม่ซึ่งจะเป็นประเภท Windows Service เรียกโครงการ FileWatcherService:

Visual Studio จะสร้างโครงการที่มีทุกสิ่งที่คุณต้องการ แม้ว่าเราไม่จำเป็นต้องเลือกโปรเจ็กต์ประเภทนี้ แต่เราสามารถสร้างโปรเจ็กต์ไลบรารีคลาสแล้วกำหนดคลาสที่จำเป็นทั้งหมดในนั้นได้

ดังนั้นโครงการใหม่จึงมีลักษณะดังนี้:

นอกจากนี้ยังมีไฟล์ Program.cs และมีโหนดบริการจริง Service1.cs

บริการนี้แสดงถึงแอปพลิเคชันปกติ แต่ไม่ได้เริ่มต้นเอง การโทรและการเข้าถึงทั้งหมดจะต้องผ่านตัวจัดการควบคุมบริการ (Service Control Manager หรือ SCM) เมื่อบริการเริ่มต้นโดยอัตโนมัติเมื่อเริ่มต้นระบบหรือด้วยตนเอง SCM จะเรียกเมธอด Main ในคลาส Program:

โปรแกรมคลาสคงที่ ( void Main() ( ServiceBase ServicesToRun; ServicesToRun = new ServiceBase ( new Service1() ); ServiceBase.Run(ServicesToRun); ) )

วิธีการหลักถูกกำหนดโดยค่าเริ่มต้นเพื่อเรียกใช้บริการหลายรายการพร้อมกัน ซึ่งกำหนดไว้ในอาร์เรย์ ServicesToRun อย่างไรก็ตาม ตามค่าเริ่มต้น โครงการจะมีบริการเดียวเท่านั้น คือ Service1 การเปิดตัวนั้นดำเนินการโดยใช้วิธี Run: ServiceBase.Run(ServicesToRun)

บริการที่กำลังเริ่มต้นจะแสดงโดยโหนด Service1.cs อย่างไรก็ตาม จริงๆ แล้วนี่ไม่ใช่ไฟล์โค้ดธรรมดา หากเราเปิดโหนดนี้ เราจะเห็นไฟล์ตัวออกแบบบริการ Service1.Designer.cs และคลาส Service1

คลาส Service1 แสดงถึงบริการจริงๆ โดยค่าเริ่มต้นจะมีรหัสต่อไปนี้:

การใช้ระบบ; ใช้ System.Collections.Generic; โดยใช้ System.ComponentModel; ใช้ System.Data; โดยใช้ระบบการวินิจฉัย ใช้ System.Linq; โดยใช้ System.ServiceProcess; ใช้ System.Text; ใช้ System.Threading.Tasks; เนมสเปซ FileWatcherService ( Service1 คลาสสาธารณะบางส่วน: ServiceBase ( public Service1() ( InitializeComponent(); ) การแทนที่การป้องกันเป็นโมฆะ OnStart (args สตริง) ( ) การแทนที่การป้องกัน void OnStop () ( ) ) )

คลาสบริการจะต้องสืบทอดจากคลาสฐาน ServiceBase คลาสนี้กำหนดวิธีการจำนวนหนึ่ง ซึ่งวิธีที่สำคัญที่สุดคือวิธี OnStart() ซึ่งจะเริ่มการดำเนินการที่ดำเนินการโดยบริการ และวิธี OnStop() ซึ่งจะหยุดบริการ

หลังจากที่ SCM เรียกเมธอด Main และลงทะเบียนบริการแล้ว ก็จะถูกเรียกโดยตรงโดยการรันเมธอด OnStart

เมื่อเราส่งคำสั่งเพื่อหยุดบริการในคอนโซลบริการหรือผ่านทางบรรทัดคำสั่ง SCM จะเรียกใช้เมธอด OnStop เพื่อหยุดบริการ

นอกเหนือจากสองวิธีนี้ในคลาสบริการแล้ว คุณสามารถแทนที่วิธีการอื่นๆ ของคลาสฐาน ServiceBase ได้หลายวิธี:

    OnPause: ถูกเรียกเมื่อบริการถูกหยุดชั่วคราว

    OnContinue: ถูกเรียกเมื่อบริการกลับมาทำงานต่อหลังจากถูกระงับ

    OnShutdown: ถูกเรียกเมื่อ Windows ปิดตัวลง

    OnPowerEvent: ถูกเรียกเมื่อโหมดพลังงานเปลี่ยนแปลง

    OnCustomCommand: ถูกเรียกเมื่อบริการได้รับคำสั่งที่กำหนดเองจาก Service Control Manager (SCM)

ในตัวสร้างของคลาส Service1 มีการเรียกเมธอด InitializeComponent() ซึ่งกำหนดไว้ในไฟล์ตัวออกแบบ Service1.Designer.cs:

Namespace FileWatcherService ( Service1 คลาสบางส่วน (ส่วนประกอบ System.ComponentModel.IContainer ส่วนตัว = null; protected override void Dispose(bool disposing) ( if (disposing && (components != null)) (ส่วนประกอบ.Dispose(); ) base.Dispose(disposing ) ) โมฆะส่วนตัว InitializeComponent() ( ส่วนประกอบ = new System.ComponentModel.Container(); this.ServiceName = "Service1"; ) )

สิ่งเดียวที่ต้องจดบันทึกไว้คือการตั้งชื่อบริการ (คุณสมบัติ ServiceName):

นี้.ServiceName = "Service1";

นี่คือชื่อที่จะแสดงในคอนโซลบริการหลังจากติดตั้งบริการนี้ เราจะเปลี่ยนมันได้ หรือจะปล่อยมันไว้เหมือนเดิมก็ได้

ตอนนี้เรามาเปลี่ยนรหัสบริการดังนี้:

การใช้ระบบ; โดยใช้ System.ServiceProcess; ใช้ System.IO; โดยใช้ System.Threading; namespace FileWatcherService ( Service1 คลาสสาธารณะบางส่วน: ServiceBase ( Logger logger; public Service1() ( InitializeComponent(); this.CanStop = true; this.CanPauseAndContinue = true; this.AutoLog = true; ) ป้องกันการแทนที่ void OnStart (string args) ( logger = new Logger(); Thread loggerThread = new Thread(new ThreadStart(logger.Start)); loggerThread.Start(); การลบล้างการป้องกันเป็นโมฆะ OnStop() ( logger.Stop(); Thread.Sleep(1000); ) คลาส Logger ( FileSystemWatcher watcher; object obj = new object(); bool Enabled = true; public Logger() ( watcher = new FileSystemWatcher("D:\\Temp"); watcher.Deleted += Watcher_Deleted; watcher.Created + = Watcher_Created; watcher.Changed += Watcher.Renamed += Watcher_Renamed; ) โมฆะสาธารณะ Start() ( watcher.EnableRaisingEvents = true; while(enabled) ( Thread.Sleep(1000); ) ) public void Stop() ( watcher.EnableRaisingEvents = false; เปิดใช้งาน = false; ) // การเปลี่ยนชื่อไฟล์ส่วนตัว void Watcher_Renamed (ผู้ส่งวัตถุ RenamedEventArgs e) ( string fileEvent = "เปลี่ยนชื่อเป็น" + e.FullPath; สตริง filePath = e.OldFullPath; รายการบันทึก (fileEvent, filePath); ) // การเปลี่ยนไฟล์ส่วนตัว void Watcher_Changed(ผู้ส่งวัตถุ, FileSystemEventArgs e) ( string fileEvent = "changed"; string filePath = e.FullPath; RecordEntry(fileEvent, filePath); ) // การสร้างไฟล์ส่วนตัว void Watcher_Created(ผู้ส่งวัตถุ, FileSystemEventArgs e) ( string fileEvent = "created"; string filePath = e.FullPath; RecordEntry(fileEvent, filePath); ) // การลบไฟล์ private void Watcher_Deleted(ผู้ส่งวัตถุ, FileSystemEventArgs e) ( string fileEvent = "deleted"; string filePath = e.FullPath; RecordEntry(fileEvent, filePath); โมฆะส่วนตัว RecordEntry(string fileEvent, string filePath) ( ล็อค (obj) ( การใช้ (ผู้เขียน StreamWriter = new StreamWriter("D:\\templog.txt", true)) ( นักเขียน .WriteLine(String.Format("(0) file (1) was (2)", DateTime.Now.ToString("dd/MM/yyyy hh:mm:ss"), filePath, fileEvent)); ; ) ) ) )

คลาสคีย์ที่สรุปการทำงานทั้งหมดคือคลาส Logger การใช้วัตถุ FileSystemWatcher จะตรวจสอบการเปลี่ยนแปลงในโฟลเดอร์ D://อุณหภูมิ- เมธอด Start() ระบุว่าเราจะเฝ้าดูการเปลี่ยนแปลงผ่านวัตถุ FileSystemWatcher และงานทั้งหมดจะดำเนินต่อไปตราบใดที่ตัวแปรบูลีนที่เปิดใช้งานเป็นจริง และเมธอด Stop() จะทำให้คลาสยุติลง

เหตุการณ์ FileSystemWatcher ช่วยให้คุณสามารถตรวจสอบการเปลี่ยนแปลงทั้งหมดในโฟลเดอร์ที่เฝ้าดู ซึ่งจะบันทึกการเปลี่ยนแปลงในไฟล์ templog.txt เพื่อหลีกเลี่ยงการแข่งขันด้านทรัพยากรสำหรับไฟล์ templog.txt ซึ่งมีการบันทึกการเปลี่ยนแปลง ขั้นตอนการบันทึกจะถูกบล็อกโดย stub lock(obj)

ด้วยเหตุนี้ หลังจากสร้าง เปลี่ยนแปลง เปลี่ยนชื่อ และลบ ไฟล์บันทึกจะมีลักษณะดังนี้:

30/07/2558 เวลา 12:15:40 น. ไฟล์ D:\Temp\New text document.txt ถูกสร้างขึ้น 30/07/2558 12:15:46 ไฟล์ D:\Temp\New text document.txt ถูกเปลี่ยนชื่อเป็น D:\ Temp\hello.txt 07/30/2015 12:15:55 ไฟล์ D:\Temp\hello.txt ถูกแก้ไข 07/30/2015 12:15:55 ไฟล์ D:\Temp\hello.txt ถูกแก้ไข 07/30 /2015 12:16:01 ไฟล์ D: \Temp\hello.txt ถูกลบแล้ว

ในคลาสบริการ Service1 นั้น มีตัวเลือกจำนวนหนึ่งถูกตั้งค่าในตัวสร้าง:

This.CanStop = จริง; // สามารถหยุดบริการนี้ได้ CanPauseAndContinue = true; // บริการสามารถหยุดชั่วคราวแล้วดำเนินการต่อ AutoLog = true; // บริการสามารถเขียนลงบันทึกได้

ในเมธอด OnStart() เธรดใหม่จะถูกเรียกเพื่อเริ่มวัตถุ Logger:

การแทนที่ที่ได้รับการปกป้องถือเป็นโมฆะ OnStart (สตริง args) ( logger = new Logger (); Thread loggerThread = new Thread (new ThreadStart (logger.Start)); loggerThread.Start (); )

เธรดใหม่เป็นสิ่งจำเป็นเนื่องจากเธรดปัจจุบันประมวลผลคำสั่ง SCM เท่านั้น และต้องส่งคืนจากเมธอด OnStart โดยเร็วที่สุด

เมื่อได้รับคำสั่งจาก SCM ให้หยุดบริการ เมธอด OnStop จะถูกทริกเกอร์ ซึ่งเรียกเมธอด logger.Stop() ความล่าช้าเพิ่มเติมจะทำให้เธรดตัวบันทึกหยุด:

การแทนที่การป้องกันเป็นโมฆะ OnStop() ( logger.Stop(); Thread.Sleep(1000); )

อย่างไรก็ตามระดับการบริการนั้นยังไม่เพียงพอ เราต้องสร้างตัวติดตั้งบริการด้วย

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

มีบริการอะไรบ้าง?

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

เราชอบที่จะถือว่าบริการเป็นงานที่ทำงานอยู่เบื้องหลังและไม่ส่งผลกระทบต่อการดำเนินงานของผู้ใช้ บริการต่างๆ ใน ​​Windows มีหน้าที่รับผิดชอบกิจกรรมเบื้องหลังทุกประเภท ตั้งแต่ Remote Procedure Call (RPC), Printer Spooler และไปจนถึง Network Location Awareness

ในช่วงหลายปีที่ผ่านมา Windows ได้เติบโตขึ้นและมีบริการต่างๆ มากมายเช่นกัน บอกตามตรงว่าบริการพื้นหลังใน Windows นั้นค่อนข้างลำบากใจ - ระบบปฏิบัติการมาพร้อมกับบริการมากมายนอกกรอบ นอกจากนี้ นักพัฒนาซอฟต์แวร์อิสระ (ISV) และแอปพลิเคชันของพวกเขากำลังเพิ่มบริการเพิ่มเติมอีกด้วย เช่น บริการอัพเดตซอฟต์แวร์ อย่างไรก็ตาม บริการบางอย่างมีความสำคัญและจำเป็นในระหว่างกระบวนการบูท ในขณะที่บริการอื่นๆ จำเป็นในภายหลังเมื่อผู้ใช้บางรายเข้าสู่ระบบ และบริการอื่นๆ ไม่จำเป็นต้องเริ่มต้นเลยจนกว่าจะมีการเรียก อย่างไรก็ตาม เมื่อคุณดูรายการบริการที่กำลังทำงานอยู่ คุณจะเห็นอ็อบเจ็กต์จำนวนมากที่ไม่จำเป็นต้องทำงานตลอด 24 ชั่วโมงทุกวัน

เกิดอะไรขึ้นกับบริการที่ทำงานตลอด 24 ชั่วโมง 7 วันต่อสัปดาห์?

มีปัญหาหลายประการที่เกี่ยวข้องกับบริการตลอด 24 ชั่วโมงทุกวัน ประการแรก เหตุใดจึงต้องมีบางสิ่งทำงานอยู่ (แม้จะอยู่เบื้องหลัง) หากไม่จำเป็น กระบวนการที่ทำงานอยู่ใดๆ (รวมถึงบริการ) จะใช้หน่วยความจำอันมีค่าและทรัพยากร CPU ที่สามารถนำไปใช้กับแอปพลิเคชันและบริการอื่นๆ ได้ หากคุณนับบริการทั้งหมดที่ทำงานอยู่ในช่วงเวลาหนึ่ง บริการเหล่านั้นจะเพิ่มหน่วยความจำ ที่จับ เธรด และการใช้งาน CPU ในปริมาณที่มีนัยสำคัญ ทรัพยากรที่ "สูญเปล่า" ทั้งหมดนี้ลดประสิทธิภาพโดยรวมของคอมพิวเตอร์ ลดการตอบสนอง และทำให้คอมพิวเตอร์ดูซบเซาและช้า นอกจากนี้ เนื่องจากบริการหลายอย่างได้รับการกำหนดค่าให้เริ่มทำงานโดยอัตโนมัติ (เริ่มทำงานเมื่อระบบเริ่มทำงาน) จึงส่งผลต่อเวลาบูตของคอมพิวเตอร์

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

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

สุดท้ายนี้ หากบริการทำงานตลอด 24 ชั่วโมงทุกวัน และเป็นบริการที่รู้จักกันดี (ซึ่งทุกแอปพลิเคชันยอดนิยมอาจมี เช่น PDF Reader) ก็จะสร้างพื้นที่การโจมตีขนาดใหญ่ ผู้โจมตีสามารถใช้ข้อมูลที่แอปพลิเคชันยอดนิยมบางตัวติดตั้งบริการตลอด 24 ชั่วโมงทุกวัน และพยายามแฮ็กเพื่อเข้าถึงคอมพิวเตอร์

จากทั้งหมดที่กล่าวมา คุณอาจสงสัยว่าเหตุใดนักพัฒนาจำนวนมากจึงตั้งค่าบริการของตนให้ทำงานตลอดเวลาหากพวกเขามีตัวเลือกอื่น แม้กระทั่งก่อน Windows 7 มีหลายตัวเลือกในการเริ่มบริการ:

  • พิการปิดใช้งานบริการโดยสมบูรณ์และป้องกันไม่ให้บริการและบริการที่เกี่ยวข้องเริ่มทำงาน - หมายความว่าผู้ใช้จะต้องเปิดใช้งานบริการด้วยตนเองจากแผงควบคุมหรือพร้อมท์คำสั่ง
  • คู่มือเริ่มบริการตามความจำเป็น (เนื่องจากการพึ่งพาบริการอื่น ๆ ) หรือเมื่อมีการเรียกใช้บริการจากแอปพลิเคชันโดยใช้ API ที่เหมาะสมดังที่แสดงด้านล่าง
  • อัตโนมัติเริ่มบริการเมื่อเข้าสู่ระบบ
  • ล่าช้าอัตโนมัติ– การเริ่มต้นประเภทใหม่กว่าที่นำมาใช้ใน Windows Vista โดยบริการจะเริ่มต้นหลังจากการบูตเสร็จสิ้นและการดำเนินการเริ่มต้นเสร็จสิ้น ซึ่งจะช่วยเร่งความเร็วในการเริ่มต้นระบบ

น่าเสียดายที่ ISV จำนวนมาก (รวมถึง Microsoft เอง) ยังคงตั้งค่าบริการของตนเป็นแบบอัตโนมัติหรืออัตโนมัติล่าช้า เนื่องจากดูเหมือนเป็นวิธีแก้ปัญหาที่ง่ายที่สุดสำหรับทุกคน บริการนี้ทำงานตลอด 24 ชั่วโมงทุกวันและพร้อมให้บริการตลอดเวลา โดยไม่จำเป็นต้องตรวจสอบการขึ้นต่อกันหรือบริการทำงานอยู่หรือไม่

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

การเกิดขึ้นของบริการแบบทริกเกอร์

วิธีแก้ปัญหาข้างต้นคือการย้ายบริการออกจาก "สถานะเปิดตลอดเวลา" ไปยังกิจกรรมเบื้องหลังประเภทอื่นๆ เช่น งานที่กำหนดเวลาไว้หรือบริการที่ทริกเกอร์ บทความนี้เกี่ยวกับ Windows 7 Trigger Start Services มีสิ่งที่น่าสนใจมากมายเกี่ยวกับ Windows 7 Scheduled Tasks ซึ่งจะกล่าวถึงในบทความต่อๆ ไป

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

NSSM เป็นซอฟต์แวร์โอเพ่นซอร์สฟรีและรองรับระบบปฏิบัติการทั้งหมด ไมโครซอฟต์เริ่มต้นด้วย Windows 2000 และลงท้ายด้วย . NSSM ไม่จำเป็นต้องติดตั้ง เพียงดาวน์โหลดและแตกไฟล์ออก การเผยแพร่ประกอบด้วยเวอร์ชันสำหรับระบบปฏิบัติการ 32- และ 64- บิต คุณสามารถรับโปรแกรมได้จากเว็บไซต์ nssm.cc ซึ่งขณะนี้เวอร์ชันเสถียรล่าสุดคือ 2.21.1 ซึ่งฉันจะใช้

เพื่อสาธิตความสามารถของ NSSM เรามาลองใช้ Notepad เป็นบริการบน .

การสร้างบริการ

เพื่อสร้างบริการที่มีชื่อว่า สมุดบันทึกเปิดคอนโซลคำสั่งไปที่โฟลเดอร์ที่มี NSSM ที่ไม่ได้แพ็ก (สำหรับ Windows 64 บิต) และป้อนคำสั่ง nssm install notepad ซึ่งจะเปิดหน้าต่างตัวติดตั้งกราฟิก NSSM หากต้องการสร้างบริการ เพียงระบุเส้นทางไปยังไฟล์ปฏิบัติการในช่องเส้นทางแล้วคลิกปุ่ม "ติดตั้งบริการ" นอกจากนี้ ในฟิลด์ตัวเลือก คุณสามารถระบุคีย์ที่จำเป็นในการเริ่มบริการได้

คุณยังสามารถระบุพารามิเตอร์เพิ่มเติมเมื่อสร้างบริการใหม่ได้

แท็บ "ปิดเครื่อง" แสดงรายการวิธีการปิดเครื่องและการหมดเวลาที่ใช้เมื่อแอปพลิเคชันปิดตัวลงตามปกติหรือขัดข้อง เมื่อ NSSM ได้รับคำสั่งหยุด (เช่น เมื่อปิดแอปพลิเคชัน) NSSM จะพยายามหยุดแอปพลิเคชันที่ได้รับการควบคุมในลักษณะปกติ หากแอปพลิเคชันไม่ตอบสนอง NSSM ก็สามารถบังคับยุติกระบวนการและกระบวนการย่อยทั้งหมดของแอปพลิเคชันนี้ได้

มีสี่ขั้นตอนในการปิดแอปพลิเคชัน และตามค่าเริ่มต้นพวกเขาจะใช้ตามลำดับนี้:

ในระยะแรก NSSM จะพยายามสร้างและส่งกิจกรรม Ctrl+Cวิธีการนี้ใช้งานได้ดีกับแอปพลิเคชันคอนโซลหรือสคริปต์ แต่ไม่สามารถใช้ได้กับแอปพลิเคชันแบบกราฟิก
จากนั้น NSSM จะตรวจจับหน้าต่างทั้งหมดที่สร้างโดยแอปพลิเคชันและส่งข้อความ WM_CLOSE ไปให้พวกเขา ทำให้แอปพลิเคชันออก
ขั้นตอนที่สามคือ NSSM คำนวณเธรดทั้งหมดที่สร้างโดยแอปพลิเคชันและส่งข้อความ WM_QUIT ซึ่งจะได้รับหากแอปพลิเคชันมีคิวข้อความเธรด
ทางเลือกสุดท้าย NSSM สามารถเรียกใช้เมธอด TerminateProcess() เพื่อบังคับให้แอปพลิเคชันยุติการทำงาน

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

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

บนแท็บ "อินพุต/เอาท์พุต (I/O)" คุณสามารถตั้งค่าการเปลี่ยนเส้นทางอินพุต/เอาท์พุตของแอปพลิเคชันไปยังไฟล์ที่ระบุได้

บนแท็บ "สภาพแวดล้อม" คุณสามารถตั้งค่าตัวแปรสภาพแวดล้อมใหม่สำหรับบริการ หรือแทนที่ตัวแปรที่มีอยู่

คุณไม่สามารถใช้เชลล์กราฟิกและสร้างบริการในคอนโซลได้ทันทีด้วยคำสั่งต่อไปนี้:

nssm ติดตั้งแผ่นจดบันทึก ″C:\Windows\system32\notepad.exe″

การจัดการบริการ

หลังจากสร้างบริการโดยใช้ NSSM แล้ว ให้ไปที่สแนปอินบริการและค้นหาบริการแผ่นจดบันทึก อย่างที่คุณเห็น ในลักษณะที่ปรากฏ มันไม่แตกต่างจากบริการอื่น ๆ เราสามารถเริ่ม หยุด หรือเปลี่ยนโหมดการเปิดตัวได้ อย่างไรก็ตาม โปรดทราบว่า nssm.exe ถูกแสดงเป็นไฟล์ปฏิบัติการ

และถ้าเราไปที่ Task Manager เราจะเห็นภาพต่อไปนี้: NSSM กำลังทำงานเป็นกระบวนการหลัก (พาเรนต์) บริการ Notepad กำลังทำงานเป็นกระบวนการย่อย และแอปพลิเคชัน Notepad กำลังทำงานอยู่ในกระบวนการย่อยนี้แล้ว

การลบบริการ

หากต้องการลบบริการ ให้ป้อนคำสั่ง nssm Remove Notepad และยืนยันการลบบริการ และโดยการป้อนคำสั่ง nssm ลบ notepad ยืนยัน คุณสามารถทำได้โดยไม่ต้องยืนยัน

เริ่มบริการแบบโต้ตอบ

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

ในการเริ่มบริการในโหมดโต้ตอบ คุณต้องเปิดคุณสมบัติของบริการในสแนปอินบริการและบนแท็บ "เข้าสู่ระบบ" ให้เลือกช่องทำเครื่องหมาย "อนุญาตให้โต้ตอบกับเดสก์ท็อป"

จากนั้นปาฏิหาริย์ก็เริ่มต้นขึ้น สำหรับบริการที่ทำงานในโหมดโต้ตอบ ระบบจะเปิดเซสชันแยกแยกต่างหาก (เซสชัน 0) เซสชันนี้สามารถเข้าถึงได้โดยใช้ Interactive Services Detection Service (ui0detect) เท่านั้น ซึ่งจะตรวจสอบการเริ่มต้นของบริการแบบโต้ตอบบนคอมพิวเตอร์และออกการแจ้งเตือน ใน Windows 7\Server 2008 บริการนี้เปิดใช้งานตามค่าเริ่มต้น แต่ใน Windows 8\Server 2012 บริการจะถูกปิดใช้งานและไม่ปรากฏในสแน็ปอินกราฟิกของบริการ (อย่างน้อยฉันก็ไม่พบที่นั่น) นอกจากนี้ หากคุณพบบริการลึกลับนี้และพยายามเริ่มใช้งาน คุณจะได้รับข้อความแสดงข้อผิดพลาด

แต่ความจริงก็คือเพื่อที่จะเรียกใช้ คุณต้องอนุญาตให้บริการแบบโต้ตอบทำงานบนคอมพิวเตอร์ของคุณ ดังนั้น ให้เปิดตัวแก้ไขรีจิสทรี ค้นหาในส่วน HKLM\System\CurrentControlSet\Control\Windows ซึ่งมีชื่อพารามิเตอร์ประเภท DWORD ไม่มีบริการเชิงโต้ตอบและตั้งค่าเป็น 0 .

จากนั้นเปิดคอนโซล PowerShell และเริ่มบริการค้นหาด้วยคำสั่ง:

เริ่มบริการ - ชื่อ ui0detect

หลังจากตรวจสอบให้แน่ใจว่าบริการตรวจจับกำลังทำงานอยู่ เราจะเริ่มบริการแผ่นจดบันทึกอีกครั้ง และเราจะได้หน้าต่างนี้ เลือก "ดูข้อความ"

และเราพบว่าตัวเองอยู่ในเซสชันว่างที่แอปพลิเคชันของเราทำงาน จากนั้นเราดำเนินการที่จำเป็นกับมันแล้วกลับมา

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

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