Visual c++ and Window Services

Visual c++ and Window Services

本文关键字:Services Window and c++ Visual      更新时间:2023-10-16

这是我用Visual C++6.0编写的程序的代码:

#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\AAdministrator\Desktop\win32apphelloworld.exe"DisplayName="Themes Service2"start=auto

命令提示符的结果是:[SC]CreateService SUCCESS到目前为止,一切都很好——创建了一个服务,它必须在Windows启动时自动启动。我重新启动。然后什么也没发生,记事本上的窗口不会出现。我从「开始」菜单->"运行"打开Services.msc。服务在那里,但它的状态是空的,我的意思是它的stsatus不是"已启动"。其"启动类型"应为"自动"。但它还没有开始。我试图用鼠标右键手动启动它,然后单击"启动",出现一个meesage框,上面写着:"错误1053:服务没有及时响应启动或控制请求"。有人能告诉我这项服务没有启动的原因吗?感谢

Windows服务程序不仅仅是一个C++可执行程序,它还必须实现某些功能,例如提供服务入口点。在这种情况下,您必须调用StartServiceCtrlDispatcher(这样Windows就知道它应该开始与服务通信),但这还不够。有关编写服务程序的信息,请参阅MSDN文档。

此外,如果您希望服务能够与桌面交互,则需要在服务属性中选中"允许服务与桌面交互"。

编辑:如果您只想在Windows启动时自动运行程序,您可以随时将其添加到启动文件夹或相应的注册表项中。