回 帖 发 新 帖 刷新版面

主题:高手进!

#include <stdio.h>


#include <Windows.h>


bool brun=false;


SERVICE_STATUS servicestatus;


SERVICE_STATUS_HANDLE hstatus;
 
void WINAPI ServiceMain(int argc, char** argv);
void WINAPI CtrlHandler(DWORD request);
int InitService();
void WINAPI ServiceMain(int argc, char** argv)


{


    servicestatus.dwServiceType = SERVICE_WIN32;


    servicestatus.dwCurrentState = SERVICE_START_PENDING;


    servicestatus.dwControlsAccepted = SERVICE_ACCEPT_SHUTDOWN|SERVICE_ACCEPT_STOP;//在本例中只接受系统关机和停止服务两种控制命令


    servicestatus.dwWin32ExitCode = 0;


    servicestatus.dwServiceSpecificExitCode = 0;


    servicestatus.dwCheckPoint = 0;


    servicestatus.dwWaitHint = 0;


    hstatus = ::RegisterServiceCtrlHandler("testservice", CtrlHandler);


    if (hstatus==0)


    {
        return;
    }


    servicestatus.dwCurrentState = SERVICE_RUNNING;


    SetServiceStatus (hstatus, &servicestatus);
    //下面就开始任务循环了,你可以添加你自己希望服务做的工作
    brun=true;
    system("C:\\helloworld.exe");
}
void WINAPI CtrlHandler(DWORD request)
{


    switch (request)


    {


        case SERVICE_CONTROL_STOP:


            brun=false;


            servicestatus.dwCurrentState = SERVICE_STOPPED;


            break;


        case SERVICE_CONTROL_SHUTDOWN:


            brun=false;


            servicestatus.dwCurrentState = SERVICE_STOPPED;


            break;


        default:


            break;


    }


    SetServiceStatus (hstatus, &servicestatus);


 


}
void main()
{


    SERVICE_TABLE_ENTRY entrytable[2];


    entrytable[0].lpServiceName="testservice";


    entrytable[0].lpServiceProc=(LPSERVICE_MAIN_FUNCTION)ServiceMain;


    entrytable[1].lpServiceName=NULL;


    entrytable[1].lpServiceProc=NULL;


    StartServiceCtrlDispatcher(entrytable);
}

想实现的是:

1、在没有用户登录的情况下,由系统自动通过‘服务’启动‘自己制作的窗体程序’。

2、有用户登录的情况下,结束‘自已制的窗体程序’,换成该用户的帐号启动‘自已制作的窗体程序’,并显示出窗体程序。

3、当用户注销后,关闭‘自己制作的窗体程序’,用系统帐号再次启动‘自已制作的窗体程序。

4、总的来说,不管有没有用户登录,这个’自己制作的窗体程序‘都要运行着。在有用户登录的情况下就显示出’自制作的窗体程序‘的界面出来。

问题:

现在已经写好一个helloworld,并且调用成功,但是就是弹不出窗口来,进程现实已经在运行了,各位帮忙!

回复列表 (共2个回复)

沙发

弹不出窗口是因为NT服务默认情况下不允许弹窗体
你可以在程序中用代码设(忘了怎么设了),也可以手工修改服务程序的桌面交互属性。

板凳

且学且珍惜,得认学习真正消化

我来回复

您尚未登录,请登录后再回复。点此登录或注册