2015-04-03 190 views
1

我在這裏使用模板開始了我的服務設計:有沒有辦法從服務中運行可執行文件?

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文件,並寫入文件。路徑設置錯誤。非常感謝

回答

2

服務在沒有桌面的單獨用戶帳戶下運行。您可以正常運行進程,但無法顯示任何UI。

+0

我做同樣的事情沒有gui試圖運行一個批處理文件運行控制檯程序,但它不起作用。這是不允許的嗎? – 2015-04-03 21:36:14

+0

@JamesJoshuaStreet:**如何**不起作用?怎麼了? – SLaks 2015-04-03 21:39:54

+0

它創建了承諾並返回true,但我沒有看到任何輸出。讓我將bat文件添加到開篇文章。 – 2015-04-03 21:41:00

0

轉到http://nginx-win.ecsds.eu/ 並下載Install_nginx_php_services.zip,閱讀腳本如何工作nginx和php以及其他任何東西,使用的工具的來源可以在MS的網站上找到。

相關問題