2017-03-03 93 views
2

我使用这个插件来创建一个windows服务:https://github.com/coreybutler/node-windows。 我想用我的服务启动一个外部程序。 EDIT 1:节点窗口运行child process.exe

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

接着我尝试与插件的方法。 EDIT2

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

这种方法开始exe文件,但我没有看到GUI在桌面上。如果我在services.msc =>Interact with desktop =>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

任何人都可以帮我吗?

回答

0

正如在Github issue中指出的,这可能是一个权限问题。

显式定义用户上下文时运行子进程的最细化方法是运行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的细微差别,并且确定问题可能很困难。

+0

我有同样的问题,如果我运行进程和子进程与管理员和完全permissios它也不工作!正如@Orange先生所说,我认为这是Windows服务的问题。我看到这个过程也进入Windows 10的后台进程! – Davide

+0

@Davide - 记住它的管理权限并不总是足够的。 Windows需要ELEVATED管理权限有几种情况。 – Corey

+0

问题是,'EXE'开始罚款!但它进入后台模式,它不显示GUI但对于服务的程序它开始,这是真的!我们已经尝试过许多不同的exe,但没有任何变化。 – Davide