使用 Get-Process 替代 tasklist

This commit is contained in:
fofolee 2019-03-27 15:55:19 +08:00
parent ccae084082
commit 2b66c4959d

View File

@ -1,26 +1,59 @@
const exec = require('child_process').exec; const fs = require('fs');
const iconv = require('iconv-lite'); const path = require("path");
const iconExtractor = require('icon-extractor');
window.tasklist = (callback) => { const os = require('os')
// if(process.platform === 'win32'){} const PowerShell = require("powershell");
let cmd = 'tasklist /FO csv /NH /V'
exec(cmd, function (err, stdout, stderr) {
let tasklist = []; getico = tasks =>{
let lines = stdout.trim().split('\n'); iconExtractor.emitter.on('icon', function (data) {
for (var line of lines){ let icondir = path.join(os.tmpdir(), 'ProcessIcon')
tasklist.push(line.trim().split(',')); fs.exists(icondir, exists => {
} if (!exists) { fs.mkdirSync(icondir) }
callback(tasklist); let iconpath = path.join(icondir, `${data.Context}.png`)
}) fs.exists(iconpath, exists => {
} if (!exists) {
fs.writeFile(iconpath, data.Base64ImageData, "base64", err => {
window.taskkill = (taskname, callback) => { if (err) { console.log(err); }
let cmd = 'TASKKILL /F /IM "' + taskname + '" /T' })
exec(cmd, { encoding: "buffer"}, (err, stdout, stderr) => { }
if (err) { })
callback(iconv.decode(stderr,'cp936')); })
return; });
}
callback(iconv.decode(stdout,'cp936')); for (var task of tasks) {
}) iconExtractor.getIcon(task.ProcessName, task.Path);
}
}
tasklist = (callback) => {
let ps = new PowerShell("chcp 65001;Get-Process | Format-List ProcessName,Path,Description");
ps.on("output", data => {
let tasklist = [];
let tasks = data.trim().split('\r\n\r\n');
for (var task of tasks) {
dict = {}
let lines = task.split('\r\n')
for (var line of lines) {
if (line) {
let key = line.split(/\s+:\s*/)[0];
let value = line.split(/\s+:\s*/)[1];
dict[key] = value;
}
}
var icon = path.join(os.tmpdir(), 'ProcessIcon', `${dict.ProcessName}.png`);
dict.Icon = icon
tasklist.push(dict);
}
tasklist.shift();
getico(tasklist);
callback(tasklist);
});
}
taskkill = (taskname, callback) => {
let ps = new PowerShell(`chcp 65001;Stop-Process -Name ${taskname}`);
ps.on("error-output", data => {
callback(data.split('\n')[0])
});
} }