急死我了 有关把自己的MFC程序写成系统服务的问题 两天没搞定

fengge8ylf 2004-01-08 12:16:09
我把一个MFC程序写成了一个服务程序,然后用另一个程序注册此服务程序。当系统启动后在“计算机管理”中的“服务”中有我的服务程序,但就是里面的代码没运行
(服务器程序功能是启动了一个定时器每5秒生成一个文件)没生成文件


谁能给我一个你写好并可以运行的服务程序,不要网上的。
百分相送!!!!
...全文
127 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
syl5005 2004-03-23
  • 打赏
  • 举报
回复
不能的,我试过了,这个程序不能行呀
blackdragonnet 2004-01-29
  • 打赏
  • 举报
回复
我也想要代码
weihuiqian@21cn.com
谢谢了!
fengge8ylf 2004-01-10
  • 打赏
  • 举报
回复
谢谢楼上的 我有时间看看 这两天开年会 很忙(其实忙于吃喝玩乐) 两天后我会结帖
fzd999 2004-01-10
  • 打赏
  • 举报
回复
#include <windows.h>
#include <stdio.h>

////////////////////////////////////////////////////////////////////////////////////////////
// Declaretion
// Begin

#define SVR_NAME "AotoLogon" // 服務名稱, 替換成需要的名稱
#define LOG_NAME "AotoLog.log" // 日誌文件名稱, 替換成需要的名稱

int nCount; // 日誌項目號
SERVICE_STATUS ServiceStatus; // 服務狀態
SERVICE_STATUS_HANDLE sshStatusHandle; // 狀態句柄

// 創建日誌文件
BOOL CreateLogoFile();

// 寫日誌文件
BOOL WriteToLog(const char *Message);

// 輸出返回值到日誌文件
BOOL WriteRetLog(const char *Msg, DWORD RetCode);

// 服務入口函數
void WINAPI SvrStart(DWORD dwArgc,LPTSTR *lpArgv);

// 服務狀態控制函數
void WINAPI SvrCtrl(DWORD dwCode);

// 服務執行函數
void ServiceEntry();

// End
////////////////////////////////////////////////////////////////////////////////////////////


void main(void)
{
// 創建日誌文件
if (!CreateLogoFile())
{
printf("Create logo file error, process terminated.\n");
return;
}
WriteToLog("[main] Logo file created, function begin.");

SERVICE_TABLE_ENTRY DispatchTable[] =
{
{SVR_NAME, SvrStart},
{NULL , NULL }
};

if (StartServiceCtrlDispatcher(DispatchTable))
{
WriteToLog("[main] StartServiceCtrlDispatcher success.");
}
else
{
WriteToLog("[main] StartServiceCtrlDispatcher failed.");
}

WriteToLog("[main] Function end.");
}

////////////////////////////////////////////////////////////////////////////////////////////

BOOL CreateLogoFile()
{
FILE *pLogFile;

pLogFile = fopen(LOG_NAME, "w+");
if (NULL == pLogFile)
{
return FALSE;
}
if (fclose(pLogFile) != 0)
{
return FALSE;
}

nCount = 0;
return TRUE;
}

BOOL WriteToLog(const char *Message)
{
FILE *pLogFile;

pLogFile = fopen(LOG_NAME, "a");
if (NULL == pLogFile)
{
return FALSE;
}

// 寫文件
fprintf(pLogFile, "%d:\t %s\n\n", ++nCount, Message);

if (fclose(pLogFile) != 0)
{
return FALSE;
}

return TRUE;
}

BOOL WriteRetLog(const char *Msg, DWORD RetCode)
{
FILE *pLogFile;

pLogFile = fopen(LOG_NAME, "a");
if (NULL == pLogFile)
{
return FALSE;
}

// 寫文件
fprintf(pLogFile, "%d:\t %s\n", ++nCount, Msg);
fprintf(pLogFile, "RetCode = %d\n\n", RetCode);

if (fclose(pLogFile) != 0)
{
return FALSE;
}

return TRUE;
}

////////////////////////////////////////////////////////////////////////////////////////////

// 服務入口函數
void WINAPI SvrStart(DWORD dwArgc,LPTSTR *lpArgv)
{
WriteToLog("[SvrStart] Function begin");

// 設置狀態
ServiceStatus.dwServiceType = SERVICE_WIN32;
ServiceStatus.dwCurrentState = SERVICE_START_PENDING;
ServiceStatus.dwControlsAccepted = SERVICE_ACCEPT_STOP
| SERVICE_ACCEPT_PAUSE_CONTINUE;
ServiceStatus.dwServiceSpecificExitCode = 0;
ServiceStatus.dwWin32ExitCode = 0;
ServiceStatus.dwCheckPoint = 0;
ServiceStatus.dwWaitHint = 0;

// 註冊狀態控制函數
sshStatusHandle = RegisterServiceCtrlHandler(SVR_NAME, SvrCtrl);
if (NULL == sshStatusHandle)
{
WriteToLog("[SvrStart] RegisterServiceCtrlHandler failed.");
return;
}
else
{
WriteToLog("[SvrStart] RegisterServiceCtrlHandler success.");
}

// 重設狀態
ServiceStatus.dwCurrentState = SERVICE_RUNNING;
if(SetServiceStatus(sshStatusHandle,&ServiceStatus)==0)
{
WriteToLog("[SvrStart] SetServiceStatus failed.");
return;
}
else
{
WriteToLog("[SvrStart] SetServiceStatus success.");
}

ServiceEntry();

WriteToLog("[SvrStart] Function end");
}

// 服務狀態控制函數
void WINAPI SvrCtrl(DWORD dwCode)
{
WriteToLog("[SvrCtrl] Function begin");

switch(dwCode)
{
case SERVICE_CONTROL_PAUSE: // 暫停
ServiceStatus.dwCurrentState = SERVICE_PAUSED;
WriteToLog("[SvrCtrl] SetServiceStatus: SERVICE_PAUSED");
break;

case SERVICE_CONTROL_CONTINUE: // 繼續
ServiceStatus.dwCurrentState = SERVICE_RUNNING;
WriteToLog("[SvrCtrl] SetServiceStatus: SERVICE_CONTINUE");
break;

case SERVICE_CONTROL_STOP: // 終止

ServiceStatus.dwCurrentState = SERVICE_STOPPED;
ServiceStatus.dwWin32ExitCode = 0;
ServiceStatus.dwCheckPoint = 0;
ServiceStatus.dwWaitHint = 0;

WriteToLog("[SvrCtrl] SetServiceStatus: SERVICE_CONTROL_STOP");

if(!SetServiceStatus(sshStatusHandle,&ServiceStatus))
{
WriteToLog("[SvrCtrl] SetServiceStatus failed.");
}
else
{
WriteToLog("[SvrCtrl] SetServiceStatus sucess.");
}
return ;

case SERVICE_CONTROL_INTERROGATE: // 刷新
break;

default:
break;
}

if(!SetServiceStatus(sshStatusHandle,&ServiceStatus))
{
WriteToLog("[SvrCtrl] SetServiceStatus failed.");
}
else
{
WriteToLog("[SvrCtrl] SetServiceStatus sucess.");
}

WriteToLog("[SvrCtrl] Function end");
}

////////////////////////////////////////////////////////////////////////////////////////////
//
// TODO: Fix your own service codes
//
////////////////////////////////////////////////////////////////////////////////////////////

void ServiceEntry()
{
WriteToLog("[ServiceEntry] Function begin.");

// TODO: add your own service codes here
CreateProcess(………………);

WriteToLog("[ServiceEntry] Function end.");
return;
}
fzd999 2004-01-10
  • 打赏
  • 举报
回复
楼主,NT系统服务是控制台程序,不可能支持MFC的。当然,运用一些技巧,其中也可以使用GUI控件的。

楼主的情况,可以在服务程序中利用CreateProcess这个函数启动一个MFC应用程序来达到目的。我可以给你一个服务框架代码,希望有所帮助。

代码见下贴
xwxllove 2004-01-10
  • 打赏
  • 举报
回复
你发给她让好帮你写。
fengge8ylf 2004-01-10
  • 打赏
  • 举报
回复
"你把你的要运行的程序先做成一个函数"

是一个可执行程序怎么做成 一个函数啊
Nizvoo 2004-01-09
  • 打赏
  • 举报
回复
Nizvoo@yahoo.com
fengge8ylf 2004-01-09
  • 打赏
  • 举报
回复
up
砝码 2004-01-09
  • 打赏
  • 举报
回复
你把你的要运行的程序先做成一个函数,然后再起动它。用ALT那个模板生成一个服务模板。要有你发过来我帮你写好了。这个很容易的dragonsun@126.com
小李匪盗 2004-01-09
  • 打赏
  • 举报
回复
up
fengge8ylf 2004-01-09
  • 打赏
  • 举报
回复
是service程序啊 有一个写好的程序现在想把他写成service程序 不知道怎样写
xiaofei7569 2004-01-09
  • 打赏
  • 举报
回复
呵呵,应该是service程序吧。
fengge8ylf 2004-01-08
  • 打赏
  • 举报
回复
我要的是用VC6.0写的服务程序。而且是MFC的(不是控制台)
taianmonkey 2004-01-08
  • 打赏
  • 举报
回复
thanx!
cong119@sohu.com
fengge8ylf 2004-01-08
  • 打赏
  • 举报
回复
谢谢 fengge_ylf@163.com
LazyCamel 2004-01-08
  • 打赏
  • 举报
回复
我也是刚刚学习系统服务,刚好写了一个这样的例子。你的邮箱?
fengge8ylf 2004-01-08
  • 打赏
  • 举报
回复
大家快来帮帮我啊
fengge8ylf 2004-01-08
  • 打赏
  • 举报
回复
up

16,551

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧