ไลบรารีนี้สามารถใช้ในการติดตั้ง/เริ่ม/หยุด/ถอนการติดตั้งสคริปต์โหนดเป็นบริการพื้นหลัง Windows สำหรับสภาพแวดล้อม การผลิต นี่ไม่ใช่เครื่องมือสำหรับการพัฒนาแอปพลิเคชัน แต่เป็นเครื่องมือในการปล่อยมัน เครื่องมือนี้สร้างการเรียกใช้งานที่จะเรียกใช้แอปของคุณด้วย Node.js เวอร์ชันใดที่ติดตั้งบนคอมพิวเตอร์
ดู Node-MAC และ Node-Linux หากคุณต้องการสนับสนุนระบบปฏิบัติการเหล่านั้น
ทวีตฉัน (@GoldGloveCB) ถ้าคุณต้องการฉัน
![]() | ![]() | ![]() | ![]() |
สปอนเซอร์ไม่ได้? พิจารณาเสนอชื่อ @coreeybutler สำหรับดารา GitHub | |||
คุณสมบัติต่อไปนี้มีอยู่ใน Node-Windows:
exec เป็น sudoerวิธีที่แนะนำในการติดตั้ง Windows โหนดคือ NPM โดยใช้ธงทั่วโลก:
npm install -g node-windows
จากนั้นในรูทโครงการของคุณรัน:
npm link node-windows
อย่างไรก็ตาม; เป็นไปได้ที่จะใช้หน้าต่างโหนดโดยไม่ต้องมีการตั้งค่าสถานะทั่วโลก (เช่นติดตั้งลงในรูทโครงการโดยตรง) รายละเอียดเพิ่มเติมเกี่ยวกับสาเหตุที่ไม่ได้มีวิธีการที่แนะนำตลอดการอ่านนี้
การใช้โมดูลโหนดดั้งเดิมบน Windows สามารถดูดได้ โมดูลเนทีฟส่วนใหญ่จะไม่กระจายในรูปแบบไบนารี โมดูลเหล่านี้ขึ้นอยู่กับ npm เพื่อสร้างโครงการโดยใช้โหนด GYP ซึ่งหมายความว่านักพัฒนาจำเป็นต้องติดตั้ง Visual Studio (และซอฟต์แวร์อื่น ๆ ที่อาจเป็นไปได้) บนระบบเพียงเพื่อติดตั้งโมดูลดั้งเดิม นี่เป็นแบบพกพา แต่เจ็บปวด ... ส่วนใหญ่เป็นเพราะ Visual Studio นั้นมีมากกว่า 2GB
หน้าต่างโหนดไม่ได้ใช้โมดูลเนทีฟ มียูทิลิตี้ไบนารี/exe บางอย่าง แต่ทุกสิ่งที่จำเป็นในการทำงานที่ซับซ้อนมากขึ้นนั้นได้รับการบรรจุและแจกจ่ายในรูปแบบที่ใช้งานได้ง่าย ดังนั้นไม่จำเป็นต้องใช้ Visual Studio ... อย่างน้อยก็ไม่ใช่สำหรับโมดูลนี้
Node-Windows มียูทิลิตี้เพื่อเรียกใช้สคริปต์ Node.js เป็นบริการ Windows โปรดทราบว่าเช่นเดียวกับบริการ Windows ทั้งหมดการสร้างหนึ่งต้องใช้สิทธิ์การดูแลระบบ หากต้องการสร้างบริการด้วยหน้าต่างโหนดเตรียมสคริปต์เช่น:
var Service = require ( 'node-windows' ) . Service ;
// Create a new service object
var svc = new Service ( {
name : 'Hello World' ,
description : 'The nodejs.org example web server.' ,
script : 'C:\path\to\helloworld.js' ,
nodeOptions : [
'--harmony' ,
'--max_old_space_size=4096'
]
//, workingDirectory: '...'
//, allowServiceLogon: true
} ) ;
// Listen for the "install" event, which indicates the
// process is available as a service.
svc . on ( 'install' , function ( ) {
svc . start ( ) ;
} ) ;
svc . install ( ) ; รหัสด้านบนสร้างวัตถุ Service ใหม่โดยให้ชื่อและคำอธิบายที่สวยงาม แอตทริบิวต์ script ระบุสคริปต์ node.js ที่ควรทำงานเป็นบริการ เมื่อเรียกใช้สิ่งนี้สคริปต์จะมองเห็นได้จากยูทิลิตี้ Windows Services
วัตถุ Service ปล่อยเหตุการณ์ต่อไปนี้:
ในตัวอย่างด้านบนสคริปต์รับฟังเหตุการณ์ install เนื่องจากเหตุการณ์นี้ถูกไล่ออกเมื่อการติดตั้งบริการเสร็จสมบูรณ์จึงปลอดภัยที่จะเริ่มบริการ
บริการที่สร้างโดย Node-Windows นั้นคล้ายคลึงกับบริการอื่น ๆ ส่วนใหญ่ที่ทำงานบน Windows พวกเขาสามารถเริ่มต้น/หยุดจากยูทิลิตี้บริการ Windows ผ่านคำสั่ง NET START หรือคำสั่ง NET STOP หรือแม้กระทั่งการจัดการโดยใช้ยูทิลิตี้ SC
อาจต้องการระบุสลับบรรทัดคำสั่งไปยังสคริปต์ของคุณ คุณสามารถทำได้โดยการตั้งค่า scriptOptions ภายในการกำหนดค่าบริการ:
var svc = new Service ( {
name : 'Hello World' ,
description : 'The nodejs.org example web server.' ,
script : 'C:\path\to\helloworld.js' ,
scriptOptions : '-c C:\path\to\somewhere\special -i'
} ) ;บางครั้งคุณอาจต้องการให้บริการที่มีข้อมูลคงที่ผ่านการสร้างบริการ คุณสามารถทำได้โดยการตั้งค่าตัวแปรสภาพแวดล้อมในการกำหนดค่าบริการดังที่แสดงด้านล่าง:
var svc = new Service ( {
name : 'Hello World' ,
description : 'The nodejs.org example web server.' ,
script : 'C:\path\to\helloworld.js' ,
env : {
name : "HOME" ,
value : process . env [ "USERPROFILE" ] // service is now able to access the user who created its' home directory
}
} ) ;นอกจากนี้คุณยังสามารถจัดหาอาร์เรย์เพื่อตั้งค่าตัวแปรสภาพแวดล้อมที่หลากหลาย:
var svc = new Service ( {
name : 'Hello World' ,
description : 'The nodejs.org example web server.' ,
script : 'C:\path\to\helloworld.js' ,
env : [ {
name : "HOME" ,
value : process . env [ "USERPROFILE" ] // service is now able to access the user who created its' home directory
} ,
{
name : "TEMP" ,
value : path . join ( process . env [ "USERPROFILE" ] , "/temp" ) // use a temp directory in user's home directory
} ]
} ) ; มีบางครั้งที่คุณอาจต้องการระบุ node เฉพาะเพื่อใช้งานเพื่อเรียกใช้สคริปต์ของคุณ คุณสามารถทำได้โดยการตั้ง execPath ในการกำหนดค่าบริการดังที่แสดงด้านล่าง:
var svc = new Service ( {
name : 'Hello World' ,
description : 'The nodejs.org example web server.' ,
script : 'C:\path\to\helloworld.js' ,
execPath : 'C:\path\to\specific\node.exe'
} ) ;หากคุณต้องการระบุผู้ใช้เฉพาะหรือข้อมูลรับรองเฉพาะเพื่อจัดการบริการคุณลักษณะต่อไปนี้อาจเป็นประโยชน์
แอตทริบิวต์ user เป็นวัตถุที่มีสามปุ่ม: domain account และ password สิ่งนี้สามารถใช้เพื่อระบุว่าผู้ใช้รายใดห้องสมุดบริการควรใช้เพื่อดำเนินการตามคำสั่งระบบ โดยค่าเริ่มต้นโดเมนจะถูกตั้งค่าเป็นชื่อคอมพิวเตอร์ในท้องถิ่น แต่สามารถแทนที่ด้วย Directory ที่ใช้งานอยู่หรือโดเมน LDAP ตัวอย่างเช่น:
app.js
var Service = require ( 'node-windows' ) . Service ;
// Create a new service object
var svc = new Service ( {
name : 'Hello World' ,
script : require ( 'path' ) . join ( __dirname , 'helloworld.js' ) ,
//, allowServiceLogon: true
} ) ;
svc . logOnAs . domain = 'mydomain.local' ;
svc . logOnAs . account = 'username' ;
svc . logOnAs . password = 'password' ;
... ทั้งบัญชีและรหัสผ่านจะต้องมีการกำหนดอย่างชัดเจนหากคุณต้องการให้โมดูลบริการเรียกใช้คำสั่งเป็นผู้ใช้เฉพาะ โดยค่าเริ่มต้นจะเรียกใช้โดยใช้บัญชีผู้ใช้ที่เปิดตัวกระบวนการ (เช่นที่เปิดตัว node app.js )
หากคุณต้องการสั่งให้ WINSW อนุญาตให้เข้าสู่ระบบบัญชีบริการระบุว่า allowServiceLogon: true สิ่งนี้ถูกปิดใช้งานโดยค่าเริ่มต้นเนื่องจากผู้ใช้บางคนมีปัญหาในการเรียกใช้สิ่งนี้โดยไม่ต้องเข้าสู่ระบบบริการ
คุณลักษณะอื่นคือ sudo แอตทริบิวต์นี้มีคุณสมบัติเดียวที่เรียกว่า password ด้วยการจัดหาสิ่งนี้โมดูลบริการจะพยายามเรียกใช้คำสั่งโดยใช้บัญชีผู้ใช้ที่เปิดตัวกระบวนการและรหัสผ่านสำหรับบัญชีนั้น สิ่งนี้ควรใช้สำหรับบัญชีที่มีสิทธิ์การดูแลระบบเท่านั้น
app.js
var Service = require ( 'node-windows' ) . Service ;
// Create a new service object
var svc = new Service ( {
name : 'Hello World' ,
script : require ( 'path' ) . join ( __dirname , 'helloworld.js' )
} ) ;
svc . sudo . password = 'password' ;
...บริการยังสามารถขึ้นอยู่กับบริการ Windows อื่น ๆ
var svc = new Service ( {
name : 'Hello World' ,
description : 'The nodejs.org example web server.' ,
script : 'C:\path\to\helloworld.js' ,
dependsOn : [ "serviceA" ]
} ) ;การถอนการติดตั้งบริการที่สร้างขึ้นก่อนหน้านี้มีลักษณะคล้ายกับการติดตั้ง
var Service = require ( 'node-windows' ) . Service ;
// Create a new service object
var svc = new Service ( {
name : 'Hello World' ,
script : require ( 'path' ) . join ( __dirname , 'helloworld.js' )
} ) ;
// Listen for the "uninstall" event so we know when it's done.
svc . on ( 'uninstall' , function ( ) {
console . log ( 'Uninstall complete.' ) ;
console . log ( 'The service exists: ' , svc . exists ) ;
} ) ;
// Uninstall the service.
svc . uninstall ( ) ;กระบวนการถอนการติดตั้งจะลบไฟล์เฉพาะกระบวนการเท่านั้น มันไม่ได้ลบสคริปต์ node.js ของคุณ!
หลายสิ่งหลายอย่าง!
กระบวนการและการตรวจสอบที่ใช้งานยาวนาน:
การกู้คืนบริการในตัวสำหรับบริการ Windows นั้นค่อนข้าง จำกัด และไม่สามารถกำหนดค่าได้อย่างง่ายดายจากรหัส ดังนั้น Windows โหนดจะสร้าง wrapper รอบสคริปต์ Node.js wrapper นี้มีหน้าที่รับผิดชอบในการรีสตาร์ทบริการที่ล้มเหลวในลักษณะอัจฉริยะและกำหนดค่าได้ ตัวอย่างเช่นหากสคริปต์ของคุณขัดข้องเนื่องจากข้อผิดพลาดที่ไม่รู้จัก Windows โหนดจะพยายามรีสตาร์ท โดยค่าเริ่มต้นสิ่งนี้จะเกิดขึ้นทุกวินาที อย่างไรก็ตาม; หากสคริปต์มีข้อบกพร่องร้ายแรงที่ทำให้เกิดความผิดพลาดซ้ำ ๆ มันจะเพิ่มค่าใช้จ่ายที่ไม่จำเป็นให้กับระบบ Windows Node จัดการกับสิ่งนี้โดยการเพิ่มช่วงเวลาระหว่างการรีสตาร์ทและกำหนดจำนวนการรีสตาร์ทสูงสุด
รีสตาร์ทอย่างชาญฉลาดที่จะไม่ชกเซิร์ฟเวอร์ของคุณ:
การใช้การตั้งค่าเริ่มต้น Windows โหนดจะเพิ่ม 25% ในช่วงเวลารอทุกครั้งที่จำเป็นต้องรีสตาร์ทสคริปต์ ด้วยการตั้งค่าเริ่มต้น (1 วินาที) ความพยายามรีสตาร์ทครั้งแรกจะเกิดขึ้นหลังจากหนึ่งวินาที ครั้งที่สองเกิดขึ้นหลังจาก 1.25 วินาที ที่สามหลังจาก 1.56 วินาที (1.25 เพิ่มขึ้น 25%) และอื่น ๆ ทั้งเวลารอคอยเริ่มต้นและอัตราการเติบโตเป็นตัวเลือกการกำหนดค่าที่สามารถส่งผ่านไปยัง Service ใหม่ ตัวอย่างเช่น:
var svc = new Service ( {
name : 'Hello World' ,
description : 'The nodejs.org example web server.' ,
script : 'C:\path\to\helloworld.js' ,
wait : 2 ,
grow : .5
} ) ;ในตัวอย่างนี้ระยะเวลารอจะเริ่มต้นที่ 2 วินาทีและเพิ่มขึ้น 50% ดังนั้นความพยายามครั้งที่สองจะเป็น 3 วินาทีต่อมาในขณะที่สี่จะเป็น 4.5 วินาทีต่อมา
อย่าทำตัวเอง!
การรีไซเคิลซ้ำ ๆ อาจเกิดขึ้นได้ตลอดไปด้วยสคริปต์ที่ไม่ดี เพื่อจัดการกับสถานการณ์เหล่านี้หน้าต่างโหนดรองรับหมวกสองชนิด การใช้ maxRetries จะทำให้จำนวนสูงสุดของการรีสตาร์ท โดยค่าเริ่มต้นสิ่งนี้ไม่ จำกัด การตั้งค่าเป็น 3 จะบอกกระบวนการที่จะไม่รีสตาร์ทกระบวนการอีกต่อไปหลังจากที่มันล้มเหลว 3 ครั้ง อีกทางเลือกหนึ่งคือ maxRestarts ซึ่ง จำกัด จำนวนการรีสตาร์ทที่พยายามภายใน 60 วินาที ตัวอย่างเช่นหากสิ่งนี้ถูกตั้งค่าเป็น 3 (ค่าเริ่มต้น) และกระบวนการขัดข้อง/รีสตาร์ทซ้ำ ๆ ซ้ำ ๆ หน้าต่างโหนดจะหยุดการเริ่มต้นใหม่หลังจากรอบที่ 3 ในหน้าต่าง 60 วินาที ตัวเลือกการกำหนดค่าทั้งสองนี้สามารถตั้งค่าได้เช่นเดียวกับ wait หรือ grow
ในที่สุดแอตทริบิวต์ที่เรียกว่า abortOnError สามารถตั้งค่าเป็น true หากคุณต้องการให้สคริปต์ของคุณ ไม่ รีสตาร์ทเลยเมื่อออกจากข้อผิดพลาด
Node-Windows ใช้ยูทิลิตี้ WINSW เพื่อสร้าง .exe ที่ไม่ซ้ำกันสำหรับแต่ละสคริปต์ node.js ที่ปรับใช้เป็นบริการ ไดเรกทอรีที่เรียกว่า daemon ถูกสร้างและเติมด้วย myappname.exe และ myappname.xml ไฟล์ XML เป็นการกำหนดค่าสำหรับการเรียกใช้งาน นอกจากนี้ winsw จะสร้างบันทึกบางอย่างสำหรับตัวเองในไดเรกทอรีนี้ (ซึ่งสามารถดูได้ในบันทึกเหตุการณ์)
ไฟล์ myappname.exe เปิดตัว windows node-windows ซึ่งรับผิดชอบในการตรวจสอบและจัดการสคริปต์ เนื่องจากไฟล์นี้เป็นส่วนหนึ่งของหน้าต่างโหนดการย้ายไดเรกทอรีโหนดหน้าต่างอาจส่งผลให้ไฟล์ .exe ไม่สามารถค้นหาสคริปต์ node.js ได้ อย่างไรก็ตาม; สิ่งนี้ไม่ควรเป็นปัญหาหากติดตั้ง windows โหนดทั่วโลกตามคำแนะนำการติดตั้งที่แนะนำ
ไฟล์เฉพาะ daemon เหล่านี้ทั้งหมดถูกสร้างขึ้นในไดเรกทอรีย่อยที่เรียกว่า daemon ซึ่งถูกสร้างขึ้นในไดเรกทอรีเดียวกันที่บันทึกสคริปต์ node.js การถอนการติดตั้งบริการจะลบไฟล์เหล่านี้
การบันทึกเหตุการณ์
บริการที่สร้างขึ้นด้วย Node-Windows มีบันทึกเหตุการณ์สองรายการที่สามารถดูได้ผ่านตัวชมเหตุการณ์ Windows แหล่งบันทึกที่ชื่อ myappname.exe ให้การบันทึกขั้นพื้นฐานสำหรับไฟล์ที่เรียกใช้งานได้ สามารถใช้เพื่อดูว่าบริการทั้งหมดเริ่มต้น/หยุดหรือมีข้อผิดพลาดเมื่อใด บันทึกที่สองที่ตั้งชื่อตามชื่อบริการของคุณ (เช่นชื่อแอปของฉัน) ใช้โดยจอภาพ Node-Windows เป็นไปได้ที่จะเขียนลงในบันทึกนี้จากสคริปต์ Node.js โดยใช้การบันทึกเหตุการณ์ Node-Windows
ใหม่ at v0.1.0 เป็นยูทิลิตี้การบันทึกเหตุการณ์ที่ ไม่ใช่ C ++ ยูทิลิตี้นี้สามารถเขียนลงในบันทึกเหตุการณ์ทำให้บันทึกของคุณมองเห็นได้จากผู้ชมเหตุการณ์ มันใช้ EventCreate ภายใต้ประทุน
เพื่อสร้างเครื่องบันทึก:
var EventLogger = require ( 'node-windows' ) . EventLogger ;
var log = new EventLogger ( 'Hello World' ) ;
log . info ( 'Basic information.' ) ;
log . warn ( 'Watch out!' ) ;
log . error ( 'Something went wrong.' ) ;ดูคล้ายกับ:
นอกจากนี้ยังมีตัวเลือกที่ใช้น้อยกว่าที่ใช้งานผ่านการบันทึกเหตุการณ์ Node-Windows
log . auditSuccess ( 'AUser Login Success' ) ;
log . auditFailure ( 'AUser Login Failure' ) ; แต่ละประเภทบันทึก (ข้อมูล, เตือน, ข้อผิดพลาด, AuditSuccess และ AuditFailure) วิธีการรับการยอมรับสองข้อโต้แย้งเพิ่มเติมรวมถึง รหัส และ การโทรกลับ โดยค่าเริ่มต้นรหัสเหตุการณ์คือ 1000 หากไม่ได้ระบุไว้เป็นอย่างอื่น เพื่อให้รหัสเหตุการณ์ที่กำหนดเองพร้อมข้อความบันทึกและเขียนข้อความนั้นไปยังคอนโซลสามารถใช้รหัสต่อไปนี้ได้:
ข้อสังเกต: จะปรากฏ EventCreate รองรับเฉพาะ ID ที่กำหนดเอง <= 1,000
log . info ( 'Something different happened!' , 700 , function ( ) {
console . log ( 'Something different happened!' ) ;
} ) ; โดยค่าเริ่มต้นบันทึกเหตุการณ์เป็นส่วนหนึ่งของขอบเขต APPLICATION ทั้งหมด อย่างไรก็ตาม; นอกจากนี้ยังเป็นไปได้ที่จะใช้บันทึก SYSTEM ในการทำเช่นนี้วัตถุการกำหนดค่าจะต้องส่งผ่านไปยังบันทึกใหม่:
var EventLogger = require ( 'node-windows' ) . EventLogger ;
var log = new EventLogger ( {
source : 'My Event Log' ,
eventLog : 'SYSTEM'
} ) ;บันทึกเหตุการณ์คำเตือนที่ผลิตโดย wrapper สามารถระงับได้โดยปิดการใช้งานเมื่อสร้างบริการ บันทึกคำเตือนถูกเปิดใช้งานโดยค่าเริ่มต้น
var svc = new Service ( {
name : 'Hello World' ,
description : 'The nodejs.org example web server.' ,
disableWarningLogs : true ,
} ) ;Node-Windows จัดส่งหลายคำสั่งเพื่อทำให้งานง่ายขึ้นบน MS Windows
Elevate นั้นคล้ายกับ sudo บน Linux/Mac มันพยายามที่จะยกระดับสิทธิพิเศษของผู้ใช้ปัจจุบันไปยังผู้ดูแลระบบท้องถิ่น การใช้สิ่งนี้ไม่จำเป็นต้องใช้รหัสผ่าน แต่ต้องการให้ผู้ใช้ปัจจุบันมีสิทธิ์การดูแลระบบ หากไม่มีสิทธิพิเศษเหล่านี้คำสั่งจะล้มเหลวด้วยข้อผิดพลาด access denied
ในระบบที่เปิดใช้งาน UAC ซึ่งอาจแจ้งให้ผู้ใช้อนุญาตให้ดำเนินการต่อ:
ไวยากรณ์ :
elevate(cmd[,options,callback])
require('child_process').exec(cmd,<OPTIONS>,callback)require('child_process').exec(cmd,options,<CALLBACK>) Sudo ทำหน้าที่คล้ายกับ sudo บน Linux/Mac แตกต่างจาก Elevate ต้องใช้รหัสผ่าน แต่จะไม่แจ้งให้ผู้ใช้อนุญาตให้ดำเนินการต่อ เช่นเดียวกับ Elevate สิ่งนี้ ยังคงต้องการสิทธิ์ในการดูแลระบบ สำหรับผู้ใช้มิฉะนั้นคำสั่งจะล้มเหลว ความแตกต่างหลักระหว่างสิ่งนี้และ Elevate () คือพรอมต์
ไวยากรณ์ :
sudo(cmd,password[,options,callback])
require('child_process').exec(cmd,<OPTIONS>,callback)require('child_process').exec(cmd,options,<CALLBACK>) คำสั่งแบบอะซิงโครนัสนี้กำหนดว่าผู้ใช้ปัจจุบันมีสิทธิ์การดูแลระบบหรือไม่ มันผ่านค่าบูลีนไปยังการโทรกลับโดยส่งคืน true หากผู้ใช้เป็นผู้ดูแลระบบหรือ false หากไม่ใช่
ตัวอย่าง
var wincmd = require ( 'node-windows' ) ;
wincmd . isAdminUser ( function ( isAdmin ) {
if ( isAdmin ) {
console . log ( 'The user has administrative privileges.' ) ;
} else {
console . log ( 'NOT AN ADMIN' ) ;
}
} ) ; วิธีการสอบถามรายการระบบปฏิบัติการสำหรับรายการกระบวนการทำงาน
var wincmd = require ( 'node-windows' ) ;
wincmd . list ( function ( svc ) {
console . log ( svc ) ;
} , true ) ; สิ่งนี้จะส่งคืนอาร์เรย์ของกระบวนการรัน การจัดหาอาร์กิวเมนต์ที่ true ตัวเลือกในตัวอย่างข้างต้นให้รายการที่มีเอาต์พุต verbose เอาต์พุตเป็นเฉพาะกับเวอร์ชันของระบบปฏิบัติการ นี่คือตัวอย่างของเอาต์พุต verbose บนคอมพิวเตอร์ Windows 8
[ {
ImageName : 'cmd.exe' ,
PID : '12440' ,
SessionName : 'Console' ,
'Session#' : '1' ,
MemUsage : '1,736 K' ,
Status : 'Unknown' ,
UserName : 'Machine\Corey' ,
CPUTime : '0:00:00' ,
WindowTitle : 'N/A'
} , {
ImageName : 'tasklist.exe' ,
PID : '1652' ,
SessionName : 'Console' ,
'Session#' : '1' ,
MemUsage : '8,456 K' ,
Status : 'Unknown' ,
UserName : 'Machine\Corey' ,
CPUTime : '0:00:00' ,
WindowTitle : 'N/A'
} ] โดยทั่วไปแล้วเอาต์พุตปกติ (ไม่ใช่คำกริยา) จะให้ ImageName , PID , SessionName , Session# , MemUsage และ CPUTime
วิธีนี้จะฆ่ากระบวนการโดย PID
var wincmd = require ( 'node-windows' ) ;
wincmd . kill ( 12345 , function ( ) {
console . log ( 'Process Killed' ) ;
} ) ; ในตัวอย่างนี้รหัสกระบวนการ 12345 จะถูกฆ่า เป็นสิ่งสำคัญที่จะต้องทราบว่าบัญชีผู้ใช้ที่ดำเนินการสคริปต์โหนดนี้อาจต้องใช้สิทธิ์การดูแลระบบ
หากคุณกำลังประสบปัญหาเกี่ยวกับตัวอย่างโปรดตรวจสอบไฟล์ TESTS.md
หากคุณกำลังเผชิญกับเหตุการณ์ InvalidInstallation ลองดูที่ไดเรกทอรี daemon ที่สร้างขึ้นระหว่างการติดตั้งเพื่อให้แน่ใจว่าไฟล์ .exe และ .xml อยู่ที่นั่น ในบางสถานการณ์ส่วนใหญ่ในช่วง _un_installation มันมีไว้สำหรับกระบวนการที่จะล็อคไฟล์บันทึกชั่วคราวซึ่งป้องกันไม่ให้ Windows ลบออก ในสถานการณ์นี้เพียงเรียกใช้การถอนการติดตั้งอีกครั้ง ในกรณีส่วนใหญ่สิ่งนี้จะแก้ไขปัญหา ถ้าไม่ให้ลบไดเรกทอรี daemon ด้วยตนเองก่อนที่จะเรียกใช้การติดตั้งอีกครั้ง
มีผู้มีส่วนร่วมหลายคนที่ทำทุกอย่างตั้งแต่การทำคุณสมบัติเพื่อช่วยหยิบหย่อนในขณะที่ฉันได้รับการล้นมือ ฉันรู้สึกซาบซึ้งอย่างไม่น่าเชื่อสำหรับความช่วยเหลือ
ขอขอบคุณเป็นพิเศษสำหรับ @Arthurblake ซึ่งมีการปรับเปลี่ยนในที่สุด ต้องขอบคุณ @hockeytim11 ที่ช่วยรวบรวมและอัปเดตปัญหาที่โดดเด่นมากมายและเริ่มนำการสนับสนุนไปยังห้องสมุดโหนดอื่น ๆ
Winsw และ Sudowin เป็นลิขสิทธิ์ของเจ้าของที่เกี่ยวข้อง Winsw มีการแจกจ่ายภายใต้ใบอนุญาต MIT Sudowin แจกจ่ายภายใต้ใบอนุญาต BSD
สคริปต์อื่น ๆ ทั้งหมดเป็นลิขสิทธิ์ (c) Corey Butler ภายใต้ใบอนุญาต MIT
(ใบอนุญาต MIT)
ลิขสิทธิ์ (c) 2013 Corey Butler
ได้รับอนุญาตโดยไม่ต้องเสียค่าใช้จ่ายสำหรับบุคคลใด ๆ ที่ได้รับสำเนาซอฟต์แวร์นี้และไฟล์เอกสารที่เกี่ยวข้อง ('ซอฟต์แวร์') เพื่อจัดการในซอฟต์แวร์โดยไม่มีการ จำกัด รวมถึง แต่ไม่ จำกัด เฉพาะสิทธิ์ในการใช้คัดลอกดัดแปลงรวมเผยแพร่แจกจ่าย sublicense
ประกาศลิขสิทธิ์ข้างต้นและการแจ้งเตือนการอนุญาตนี้จะรวมอยู่ในสำเนาทั้งหมดหรือส่วนสำคัญของซอฟต์แวร์
ซอฟต์แวร์มีให้ 'ตามที่เป็นอยู่' โดยไม่มีการรับประกันใด ๆ ไม่ว่าโดยชัดแจ้งหรือโดยนัยรวมถึง แต่ไม่ จำกัด เพียงการรับประกันความสามารถในการค้าการออกกำลังกายเพื่อวัตถุประสงค์เฉพาะและการไม่เข้าร่วม ไม่ว่าในกรณีใดผู้เขียนหรือผู้ถือลิขสิทธิ์จะต้องรับผิดชอบต่อการเรียกร้องความเสียหายหรือความรับผิดอื่น ๆ ไม่ว่าจะเป็นการกระทำของสัญญาการละเมิดหรืออื่น ๆ ที่เกิดขึ้นจากหรือเกี่ยวข้องกับซอฟต์แวร์หรือการใช้งานหรือการติดต่ออื่น ๆ ในซอฟต์แวร์