可以写一个windows服务:
#include "stdafx.h"
#include "iostream"
#include  "stdafx.h"   
#include  "winsvc.h"  
#include  <atlbase.h>  //CRegKey类需要的头文件  
#include  <Afxtempl.h>  //CArray类需要的头文件  
#include  <tlhelp32.h>  //ToolHelp函数需要的头文件   
#include "math.h"using namespace std;
 
#ifdef  _DEBUG  
#define  new  DEBUG_NEW  
#undef  THIS_FILE  
static  char  THIS_FILE[]  =  __FILE__;  
#endif  
 
/////////////////////////////////////////////////////////////////////////////  
//  The  one  and  only  application  object  
 
CWinApp  theApp;  
 
using  namespace  std;  
SERVICE_STATUS_HANDLE  ssh;  
SC_HANDLE  scm,svc;  
SERVICE_STATUS  ss;  
CArray<PROCESSENTRY32,PROCESSENTRY32  &>  m_PEArray;  
void  WINAPI  ServiceMain(DWORD  dwArgc,  LPTSTR  *lpszArgv);  
void  WINAPI  Handler(DWORD  Opcode);  
void  InstallService();  
UINT  jiankong(LPVOID  lpvoid);  int  _tmain(int  argc,  TCHAR*  argv[],  TCHAR*  envp[])  
{  
           int  nRetCode  =  0;  
 
           //  initialize  MFC  and  print  and  error  on  failure  
           if  (!AfxWinInit(::GetModuleHandle(NULL),  NULL,  ::GetCommandLine(),  0))  
           {  
                       //  TODO:  change  error  code  to  suit  your  needs  
                       cerr  <<  _T("Fatal  Error:  MFC  initialization  failed")  <<  endl;  
                       nRetCode  =  1;  
           }  
           else  
           {  
                       //  TODO:  code  your  application's  behavior  here.  
                       SERVICE_TABLE_ENTRY  ste[2];  
                       //线程入口表  
                       ste[0].lpServiceName="load";  //线程名字  
                       ste[0].lpServiceProc=ServiceMain;  //线程入口地址  
                       //可以有多个线程,最后一个必须为NULL  
                       ste[1].lpServiceName=NULL;  
                       ste[1].lpServiceProc=NULL;  
                       StartServiceCtrlDispatcher(ste);  
                       InstallService();  
           }  
 
           return  nRetCode;  
}  
 
//安装并启动服务  
void  InstallService()  
{  
           LPTSTR  lpSysPath=new  char[MAX_PATH];  
           ::GetSystemDirectory(lpSysPath,MAX_PATH);  
           LPCTSTR  lpsysfilename;  
           lpsysfilename=(LPCTSTR)lstrcat(lpSysPath,"\\LoadUpdateServer.exe");  
           scm=OpenSCManager(NULL,NULL,SC_MANAGER_ALL_ACCESS);  
           if(scm!=NULL)  
                       svc=CreateService(scm,"load","load",SERVICE_ALL_ACCESS,  
                       SERVICE_WIN32_OWN_PROCESS  |SERVICE_INTERACTIVE_PROCESS,SERVICE_AUTO_START,SERVICE_ERROR_IGNORE,lpsysfilename,NULL,NULL,NULL,NULL,NULL);  
           if(svc!=NULL)  
                       svc=OpenService(scm,"load",SERVICE_START);  
           if  (svc!=NULL)  
           {  
                       StartService(svc,0,NULL);  
                       CloseServiceHandle(svc);  
           }  
           CloseServiceHandle(scm);  
}  
//服务的真正入口点函数  
void  WINAPI  ServiceMain(DWORD  dwArgc,  LPTSTR  *lpszArgv)  
{  
           ss.dwServiceType  =  SERVICE_WIN32;  
           ss.dwCurrentState  =  SERVICE_START_PENDING;  
           ss.dwControlsAccepted  =  SERVICE_ACCEPT_STOP  |  SERVICE_ACCEPT_PAUSE_CONTINUE;  
           ss.dwServiceSpecificExitCode  =  0;  
           ss.dwWin32ExitCode  =  0;  
           ss.dwCheckPoint  =  0;  
           ss.dwWaitHint  =  0;  
           ssh=RegisterServiceCtrlHandler("load",Handler);  
           ss.dwCurrentState  =  SERVICE_RUNNING;  
           ss.dwCheckPoint  =  0;  
           ss.dwWaitHint  =  0;  
           SetServiceStatus(ssh,&ss);  
           AfxBeginThread(jiankong,NULL,NULL);  //开始一个工作线程实现程序功能  
           ss.dwCurrentState  =  SERVICE_RUNNING;  
           ss.dwCheckPoint  =  0;  
           ss.dwWaitHint  =  0;  
           SetServiceStatus(ssh,&ss);  
}  
//处理服务要求  
void  WINAPI  Handler(DWORD  Opcode)  
{  
           switch(Opcode)  
           {  
           case  SERVICE_CONTROL_STOP:  
                       ss.dwCurrentState  =SERVICE_STOPPED;  
                       SetServiceStatus  (ssh,&ss);  
                       break;  
           case  SERVICE_CONTROL_CONTINUE:  
                       ss.dwCurrentState  =  SERVICE_RUNNING;  
                       SetServiceStatus  (ssh,&ss);  
                       break;  
           case  SERVICE_CONTROL_PAUSE:  
                       ss.dwCurrentState  =  SERVICE_PAUSED;  
                       SetServiceStatus  (ssh,&ss);  
                       break;  
           case  SERVICE_CONTROL_INTERROGATE:  
                       break;  
           }  
           SetServiceStatus  (ssh,&ss);  
}  //在进程列表中监控邮箱进程的线程函数  
UINT  jiankong(LPVOID  lParam)  
{  
CString sPath;
GetModuleFileName(NULL,sPath.GetBufferSetLength (MAX_PATH+1),MAX_PATH);
sPath.ReleaseBuffer ();
int nPos = 0;
nPos = sPath.ReverseFind('\\');
CString str = sPath.Right(sPath.GetLength()-nPos-1);    // 不含路径的升级文件名
sPath = sPath.Left (nPos);
while(true){
CString value;
GetPrivateProfileString("loadConfig","startTime","3",value.GetBuffer(MAX_PATH),MAX_PATH,sPath+"\\loadConfig.ini"); 
//应该启动时间
int hourStart=atoi(value);
CTime time=CTime::GetCurrentTime();
//当前时间
int hourNow=time.GetHour();
//如果当前时间与启动时间差不超过2,那么启动程序
//if(fabs(hourStart-hourNow)<1){
if(fabs(hourStart-hourNow)<=2){
STARTUPINFO si;
PROCESS_INFORMATION pi; ZeroMemory( &si, sizeof(si) );
si.cb = sizeof(si);
ZeroMemory( &pi, sizeof(pi) ); // Start the child process. 
if( !CreateProcess( NULL,   // No module name (use command line). 
TEXT("LoadUpdateService.exe"), // 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.

{
CString logMessage;
int year=time.GetYear();
int month=time.GetMonth();
int day=time.GetDay();
int minute=time.GetMinute();
logMessage.Format("%d年%d月%d日%d:%d",year,month,day,hourNow,minute);
CString errorMessage;
errorMessage.Format( "CreateProcess failed (%d).\n", GetLastError() );
WritePrivateProfileString("log",logMessage,errorMessage,sPath+"\\loadConfig.ini");
continue;
} // Wait until child process exits.
//WaitForSingleObject( pi.hProcess, INFINITE );
CloseHandle( pi.hProcess );
CloseHandle( pi.hThread ); }
::Sleep(14400000);  //1000*60*60*4,四个小时
//::Sleep(14400000);
//::Sleep(1000*30);
}
return 1;
}