2

我使用这个插件来创建一个 Windows 服务:https ://github.com/coreybutler/node-windows 。我想用我的服务启动一个外部程序。编辑1:

var cp = require("child_process");
cp.exec("C:\\Users\\test\\Desktop\\file.exe", function(error, stdout) {
}); 

随后我尝试了一种插件方法。编辑2

node_windows.elevate("C:\\Users\\test\\Desktop\\file.exe",function(error,stdout){
 });

此方法启动 exe,但我在桌面中看不到 GUI。services.msc如果我在=>中检查选项,Interact with desktop我会看到另一个窗口要求我确认程序的交互,如下所示:http ://help.tcadmin.com/images/d/dd/InteractWithDesktop.png 如果我选择“查看消息”它将我重定向到另一个部分,只有我的程序和节点 bash 没有桌面应用程序(像这样:https ://s3.amazonaws.com/cdn.freshdesk.com/data/helpdesk/attachments/production/4029645611/original/ 7daystodie-session0.png?1471375419 )

我已经打开了一个问题:https ://github.com/coreybutler/node-windows/issues/163

任何人都可以帮助我吗?

4

1 回答 1

0

正如Github 问题中所述,这可能是权限问题。

在显式定义用户上下文的同时运行子进程的最精细方法是运行 cmd.exe。因此,它可能类似于以下(未经测试的)伪代码:

require('child_process').exec('cmd.exe', ['/c /env /user:username C:\nodejs\node.exe C:\path\to\myscript.js'], function(){...})

您可以在 technet 上阅读有关cmdrunas的更多信息。

这种方法带有一大堆警告(这就是我建议避免使用它的原因)。它使您的代码特定于平台(即node-macnode-linux不适用于此)。我还注意到不同版本的 Windows 上 runas 的细微差别,而且很难确定问题。

于 2017-03-03T15:47:14.213 回答