16,466
社区成员
发帖
与我相关
我的任务
分享
CreateService(
schSCManager,
SVCNAME,
SVCNAME,
SERVICE_ALL_ACCESS,
SERVICE_WIN32_OWN_PROCESS|SERVICE_INTERACTIVE_PROCESS,//SERVICE_INTERACTIVE_PROCESS设置这样服务属性就将和桌面交互勾上,然//后试下上面说的方法
SERVICE_AUTO_START,
SERVICE_ERROR_NORMAL,
szPath,
NULL,
NULL,
NULL,
NULL,
NULL);
// FileProSer.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include "windows.h"
#include "stdio.h"
#define LOGFile "c:\\log.txt"
SERVICE_STATUS ServiceStatus;
SERVICE_STATUS_HANDLE hStatus;
void ServiceMain();
void ControlHandler(DWORD request);
int InitService();
int WriteToLog(char* str)
{
FILE* log = fopen(LOGFile,"a+");
if(log == NULL)
return -1;
fprintf(log,"%s\n",str);
fclose(log);
return 0;
}
int InitService()
{
OutputDebugString("START");
int result;
result = WriteToLog("START");
return result;
}
void ControlHandler(DWORD request)
{
switch(request)
{
case SERVICE_CONTROL_STOP:
OutputDebugString("STOP");
WriteToLog("....STOP");
ServiceStatus.dwWin32ExitCode = 0;
ServiceStatus.dwCurrentState = SERVICE_STOPPED;
SetServiceStatus(hStatus,&ServiceStatus);
return;
case SERVICE_CONTROL_SHUTDOWN:
OutputDebugString("STOP");
WriteToLog("....STOP");
ServiceStatus.dwWin32ExitCode = 0;
ServiceStatus.dwCurrentState = SERVICE_STOPPED;
SetServiceStatus(hStatus,&ServiceStatus);
return;
default:
break;
}
SetServiceStatus(hStatus,&ServiceStatus);
return;
}
void ServiceMain()//int argc,char** argv
{
int error;
ServiceStatus.dwServiceType = SERVICE_WIN32;
ServiceStatus.dwCurrentState = SERVICE_START_PENDING;
ServiceStatus.dwControlsAccepted = SERVICE_ACCEPT_STOP|SERVICE_ACCEPT_SHUTDOWN;
ServiceStatus.dwWin32ExitCode = 0;
ServiceStatus.dwServiceSpecificExitCode = 0;
ServiceStatus.dwCheckPoint = 0;
ServiceStatus.dwWaitHint = 0;
hStatus = RegisterServiceCtrlHandler("RunFilePro",(LPHANDLER_FUNCTION)ControlHandler);
if(hStatus == (SERVICE_STATUS_HANDLE)0)
{
return ;
}
error = InitService();
if(error)
{
ServiceStatus.dwCurrentState = SERVICE_STOPPED;
ServiceStatus.dwWin32ExitCode = -1;
SetServiceStatus(hStatus,&ServiceStatus);
}
if(ServiceStatus.dwCurrentState = SERVICE_RUNNING)
{
char achAppPath[MAX_PATH]={0};
char *pchPath=NULL;
GetModuleFileName(NULL,achAppPath,MAX_PATH);
pchPath = strrchr(achAppPath, '\\') + 1;
if (pchPath != NULL)
*pchPath = 0;
strcat(achAppPath,"XDict.exe");
ShellExecute(NULL,"open","D:\\工具软件\\金山词霸\\XDict.exe",NULL,NULL,SW_SHOWNORMAL);//achAppPath
}
}
void main()
{
SERVICE_TABLE_ENTRY ServiceTable[2];
ServiceTable[0].lpServiceName = "RunFilePro";
ServiceTable[0].lpServiceProc = (LPSERVICE_MAIN_FUNCTION)ServiceMain;
ServiceTable[1].lpServiceName = NULL;
ServiceTable[1].lpServiceProc = NULL;
StartServiceCtrlDispatcher(ServiceTable);
}