2016-05-15 74 views
-1

這裏是我用Visual C++ 6.0程序的代碼:Visual C++和窗口服務

#include <Windows.h> 
#include "stdafx.h" 
#include <stdlib.h> 
int APIENTRY WinMain(HINSTANCE hInstance, 
        HINSTANCE hPrevInstance, 
        LPSTR  lpCmdLine, 
        int  nCmdShow) 
{ 

    while(true) 
    { 
     int sleepInterval = rand()%15; 
     Sleep(sleepInterval*1000); 

     WinExec("notepad.exe" ,SW_SHOWNORMAL); 


    } 
     return 0; 
} 

接我一招,從這個代碼生成的* .exe文件,並將其移動到我的桌面。我從那裏開始。一切正常,我的意思是記事本編輯器窗口不時出現。 然後我用命令提示符下面的命令創建了Windows服務: C:\ Documents and Settings \ Administrator> sc create ThemesService2 binPath =「C:\ Documents and Settings \ Administrator \ Desktop \ win32apphelloworld.exe」DisplayName =「Themes Service2 「start = auto

命令提示符的結果是這樣的:[SC] CreateService SUCCESS 到目前爲止一切正常 - 服務已創建並且必須在Windows啓動時自動啓動。我重新啓動。然後沒有任何反應,記事本中的窗口不會出現。我從開始菜單 - >運行打開Services.msc。該服務在那裏,但它的狀態是空的,我的意思是它的stsatus不是'開始'。它的'啓動類型'是'自動的',因爲它應該是。 但它沒有啓動。我試着用鼠標右鍵手動啓動它,然後點擊「開始」,出現一個錯誤框,說:'錯誤1053:服務沒有及時響應啓動或控制請求'。有人能告訴我這項服務沒有啓動的原因是什麼? 謝謝

+0

服務運行在不同的會話中,所以你不會看到任何記事本窗口。 –

+0

嗯,我不知道這個。但是,當我檢查Services.msc中的服務時,即使我沒有看到記事本窗口,服務狀態仍然不能啓動。目前它不是'開始',我把自己理解爲「不跑步」? – citroen

+0

您的'WinMain'永遠不會返回,這與您收到的錯誤消息一致。這就是說,我不知道你是否可以從一個經常性的易用性創建一個服務。需要服務來實現某些回調。 – IInspectable

回答

1

Windows服務程序不是簡單的C++可執行文件,它必須實現某些功能,例如提供服務入口點。在這種情況下,您必須致電StartServiceCtrlDispatcher(以便Windows知道它應該開始與服務進行通信),但這還不夠。請參閱MSDN Documentation for writing Service Programs

另外,如果您希望服務能夠與桌面交互,您需要在服務屬性中選中「允許服務與桌面交互」。

編輯:如果你只是想自動運行的程序在Windows啓動時,你可以隨時add it to the startup folder或到appropriate registry key

+0

任務計劃程序是另一個註冊應用程序以在特定事件上運行的地方。它比啓動文件夾提供更多的靈活性,並且無法輕鬆禁用。 – IInspectable