2017-03-03 67 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