2014-03-26 83 views
0

我正在創建不應向用戶顯示控制檯窗口的node.js自定義構建。防止在自定義節點中創建控制檯窗口node.js構建

我試圖改變linker config in the gyp file2(應該設置連接flag/SUBSYSTEM:WINDOWS),但我仍然得到一個控制檯窗口,當我運行生成的二進制node.exe。

如何防止控制檯窗口出現?


編輯:進一步的調查顯示,在node.gyp鏈接器配置不生效。生成的node.vcxproj仍然有<Link><SubSystem>Console</SubSystem></Link>(這對我來說很奇怪,因爲在node.gyp的相同部分中添加'UACUIAccess': 'true'確實生效),所以構建的二進制文件被錯誤鏈接。

+0

我的猜測是,你將需要做一個快捷方式,使窗口最小化。如果你想要更好,那麼你需要用不使用控制檯窗口的應用程序語言編寫啓動程序。我會使用一個C應用程序來做到這一點。 – krowe

+0

最小化啓動控制檯不適用於我,也不會啓動。我正在攻擊一個節點的分支,所以我完全控制了代碼(JS和C)。 – josh3736

+0

編寫一個小應用程序以使用CreateProcess啓動它:http://msdn.microsoft.com/en-us/library/windows/desktop/ms682425%28v=vs.85%29.aspx – krowe

回答

0

看來,你必須:

  • 註釋掉'SubSystem': 1common.gypi。 (將其更改爲2導致建立mksnapshot失敗。)
  • 變化SubSystem2node.gyp
  • 同時添加'EntryPointSymbol': 'wmainCRTStartup'到node.gyp。

這會生成一個不會創建控制檯窗口的node.exe。

1

解決方案1 ​​

保存文本的這一行的文件invisible.vbs:

CreateObject(「Wscript.Shell」).Run 「」"」 & WScript.Arguments(0) & 「」"」, 0, False 

無形地運行任何程序或批處理文件,使用這樣的:

wscript.exe 「C:\Wherever\invisible.vbs」 「C:\Some Other Place\MyBatchFile.bat」 

也可以傳遞/傳遞參數列表,只使用兩個雙引號

CreateObject(「Wscript.Shell」).Run 「」 & WScript.Arguments(0) & 「」, 0, False 

如:Invisible.vbs 「Kill.vbs ME.exe」

解決方案2

使用命令行工具來默默啓動一個進程:Quiet

解決方案3

推出自己的C++的Win32應用程序:

PROCESS_INFORMATION procInfo = {0}; 
STARTUPINFOstartupInfo = {0}; 
SECURITY_ATTRIBUTESsaAttr = {0}; 
HANDLEhStdIn = GetStdHandle(STD_INPUT_HANDLE); 
HANDLEhStdOut = GetStdHandle(STD_OUTPUT_HANDLE); 
HANDLEhStdErr = GetStdHandle(STD_ERROR_HANDLE); 

// build up security attributes 
saAttr.nLength = sizeof(saAttr); 
    saAttr.bInheritHandle = TRUE; 
    saAttr.lpSecurityDescriptor = NULL; 

// set file handles for process to be created 
startupInfo.cb = sizeof(startupInfo); 
startupInfo.dwFlags = STARTF_USESTDHANDLES; 
startupInfo.hStdInput = hStdIn; 
startupInfo.hStdOutput = hStdOut; 
startupInfo.hStdError = hStdErr; 

// build command line: format is [cmd.exe /c "%batchScript%" %batchArgs%] 
if (-1 == _snprintf_s(cmd, sizeof(cmd),"cmd.exe /c \"%s\" %s", batchScript, batchArgs)) 
errorExit("_snprintf_s(\"cmd.exe /c \"%%s\" %%s\"), \"%s\", \"%s\") failed.", batchScript, batchArgs); 

rc = CreateProcess(NULL, cmd, NULL, &saAttr, TRUE, CREATE_NO_WINDOW, NULL, tempPath, &startupInfo, &procInfo); 
+0

構建時間[鏈接器配置](http://msdn.microsoft.com/en-us/library/fcc1zstk.aspx)是決定應用程序是否被Windows授予控制檯窗口的原因。我很欣賞這些建議,但這些都不能解決我的問題。如果使用正確的鏈接器選項構建節點,則不會首先創建控制檯窗口。 – josh3736

相關問題