我在這裏使用模板開始了我的服務設計:有沒有辦法從服務中運行可執行文件?
https://msdn.microsoft.com/en-us/library/windows/desktop/bb540475(v=vs.85).aspx
,我只是想打開記事本,證明我可以做的東西的服務,因爲最終我想運行揭開序幕批處理文件在一個獨立的進程中,將啓動一個nginx服務器。然後我想運行停止服務器批處理文件來停止它。看起來很簡單。
我創建了一個進程並在C++項目的主要內部運行它(該主要註冊服務主要在服務啓動時被調用)。
在visual studio的調試器裏面,我看到createprocess返回正常,然後記事本打開。
然後,我將該代碼移入已註冊的服務主體中,添加30秒的睡眠延遲,啓動服務,然後將Visual Studio的調試器附加到該過程。我看到代碼在創建記事本過程時碰到了我的斷點。
然後創建處理函數返回罰款,但由於某種原因記事本不打開。
https://msdn.microsoft.com/en-us/library/windows/desktop/ms682425%28v=vs.85%29.aspx
if (!CreateProcess(
"C:\\Windows\\System32\\Notepad.exe", // No module name (use command line)
NULL, // Command line
NULL, // Process handle not inheritable
NULL, // Thread handle not inheritable
FALSE, // Set handle inheritance to FALSE
0, // No creation flags
NULL, // Use parent's environment block
NULL, // Use parent's starting directory
&si, // Pointer to STARTUPINFO structure
&pi // Pointer to PROCESS_INFORMATION structure
)
)
{
printf("CreateProcess failed (%d).\n", GetLastError());
}
我得到它成功地運行該bat文件,並寫入文件。路徑設置錯誤。非常感謝
我做同樣的事情沒有gui試圖運行一個批處理文件運行控制檯程序,但它不起作用。這是不允許的嗎? – 2015-04-03 21:36:14
@JamesJoshuaStreet:**如何**不起作用?怎麼了? – SLaks 2015-04-03 21:39:54
它創建了承諾並返回true,但我沒有看到任何輸出。讓我將bat文件添加到開篇文章。 – 2015-04-03 21:41:00