node.js - 如何使用 Nodejs 和 spawn 在 Windows 10 上以管理员身份运行一些 CMD 命令?
问题描述
我在 Windows 10 上使用 Nodejs。每次打开应用程序时,我都想检查带有扩展名的文件ext
是否与我的应用程序相关联。如果不是,我需要在 cmd 上运行此命令才能再次建立关联:
assoc .ext=CustomExt
ftype CustomExt=app.exe %1 %*
但我需要管理员权限才能完成这项工作。
我读过这个帖子Jeff M 准确地说出我想要实现的目标,但没有人回答他:
从可用性的角度来看,理想的情况是,只有当用户在我的节点程序中执行实际需要这些权限的操作时,才会提示用户提升权限。第二个最佳选择是当用户第一次启动节点程序时被提示提升权限。最不理想的情况是,如果根本没有提示用户,则由用户始终记住通过右键单击以管理员身份运行来启动程序。这是最不理想的,因为它给用户带来了记住始终以非典型方式启动程序的负担。
所以,回到我原来的问题,现在如果我尝试生成一个子进程,其中生成的程序需要提升的权限(我原始消息中的示例代码),当前的行为是不提示用户提供这些权限,而是节点程序因错误而崩溃。我怎样才能让我的节点程序请求这些特权而不是死掉?
我的nodejs脚本:
const { spawn } = require('child_process');
const assoc = spawn( // how to run this as admin privileges?
'assoc', // command
['.ext=CustomExt'], // args
{'shell': true } // options: run this into the shell
);
assoc.stdout.on('data', (buffer) => {
var message = buffer.toString('utf8');
console.log(message);
});
assoc.stderr.on('data', (data) => {
console.log(`stderr: ${data}`);
});
assoc.on('close', (code) => {
console.log(`child process exited with code ${code}`);
});
在 Nodejs 中创建扩展关联的任何其他方式也将受到赞赏。
2020 年 1 月 21 日更新
我相信 VSCode 可以做到这一点。所以我需要探索它的源代码来找到解决方案。现在在做其他项目,暂时没有时间研究。当一个文件应该以root权限保存时,会提示这样的消息,这正是我所需要的:
2021 年 6 月 24 日更新
我在 VSCode 问题中找到了一个有用的线程。使用sudo-prompt
可能是解决方案。我还没有尝试过,但是依赖项仍然在 中package.json
,所以看起来很有希望。
解决方案
我知道它的旧帖子,但我遇到了这个问题并找到了一个替代解决方案,因此考虑分享。
创建一个 bat 文件,让我们使用您要运行的命令将其称为 disabletask.bat,例如在 TaskScheduler "SCHTASKS.EXE /change /disable /TN "Test" 中禁用任务
在以最高权限运行的 TaskScheduler 中创建一个任务,请参见图像中的复选框
使用 Nodejs 执行此任务
var child_process = require('child_process'); child_process.exec('SCHTASKS.EXE /RUN /TN "disabletask"', function(error, stdout, stderr) { console.log(stdout); });
推荐阅读
- c++ - 计算一维c ++上二维数组的平均值
- python - 如何在python的“线程”模块中指定线程数
- android - 第一次向相反方向滑动时,MotionLayout OnSwipe 过渡故障
- laravel - 在 laravel 中查找表是否为空
- django - 从模板中的查询集中获取对象名称
- c++ - 创建返回集合类型的联合函数
- python - Python用当前时间戳重命名相对路径
- android - 哪个 Android 模拟器与 Visual Studio 一起使用?
- python - 切片 Pandas 数据框时出现问题
- java - 从 Spring 4 迁移到 Spring 5 的困难