网页资讯视频图片知道文库贴吧地图采购
进入贴吧全吧搜索

 
 
 
日一二三四五六
       
       
       
       
       
       

签到排名:今日本吧第个签到,

本吧因你更精彩,明天继续来努力!

本吧签到人数:0

一键签到
成为超级会员,使用一键签到
一键签到
本月漏签0次!
0
成为超级会员,赠送8张补签卡
如何使用?
点击日历上漏签日期,即可进行补签。
连续签到:天  累计签到:天
0
超级会员单次开通12个月以上,赠送连续签到卡3张
使用连续签到卡
06月23日漏签0天
win32吧 关注:872贴子:1,638
  • 看贴

  • 图片

  • 吧主推荐

  • 游戏

  • 1回复贴,共1页
<<返回win32吧
>0< 加载中...

编写服务程序命令行安装错误1073大哥们帮我看看

  • 只看楼主
  • 收藏

  • 回复
  • 加你妹的表情
  • 初级粉丝
    1
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
#include<stdio.h>
#include<stdlib.h>
#include<Windows.h>
#include<string.h>
#define SLEEP_TIME 5000
#define FILE_PATH "C:\\log.txt"
SERVICE_STATUS m_ServiceStatus;
SERVICE_STATUS_HANDLE m_ServiceStatusHandle;
void WINAPI ServiceMain(int argc, char** argv);
void WINAPI ServiceCtrlHandler(DWORD Opcode);
int WriteToLog(const char* str);
BOOL InstallCmdService();
void DelService();
BOOL bRuning = TRUE;
int main(int argc,char *argv[])
{
SERVICE_TABLE_ENTRY DispatchTable[2];
if (argc == 2)
{
if (!_stricmp(argv[1], "-i"))
{
InstallCmdService();
}
else if (!_stricmp(argv[1], "-r"))
{
DelService();
}
return 0;
}
DispatchTable[0].lpServiceName = (LPWSTR)"demo";
DispatchTable[0].lpServiceProc = (LPSERVICE_MAIN_FUNCTION)ServiceMain;
DispatchTable[1].lpServiceName = NULL;
DispatchTable[1].lpServiceProc = NULL;
StartServiceCtrlDispatcher(DispatchTable);
return 0;
}
int WriteToLog(const char* str)
{
FILE* pfile;
fopen_s(&pfile, FILE_PATH, "a+");
if (pfile == NULL)
{
return -1;
}
else
{
fprintf_s(pfile, "%s\n", str);
fclose(pfile);
return 0;
}
}
void WINAPI ServiceMain(int argc, char** argv)
{
MEMORYSTATUSEX memstatus;
memstatus.dwLength = sizeof(memstatus);
char str[100];
int availmb;
m_ServiceStatus.dwServiceType = SERVICE_WIN32;
m_ServiceStatus.dwCurrentState = SERVICE_START_PENDING;
m_ServiceStatus.dwControlsAccepted = SERVICE_ACCEPT_SHUTDOWN | SERVICE_ACCEPT_STOP;
m_ServiceStatus.dwWin32ExitCode = 0;
m_ServiceStatus.dwServiceSpecificExitCode = 0;
m_ServiceStatus.dwCheckPoint = 0;
m_ServiceStatus.dwWaitHint = 0;
m_ServiceStatusHandle = RegisterServiceCtrlHandler((LPWSTR)"demo", ServiceCtrlHandler);
if (m_ServiceStatusHandle == 0)
{
WriteToLog("RegisterServiceCtrlHandle failed");
return;
}
WriteToLog("RegisterServiceCtrlHandle success");
m_ServiceStatus.dwCurrentState = SERVICE_RUNNING;
SetServiceStatus(m_ServiceStatusHandle, &m_ServiceStatus);
bRuning = TRUE;
memset(str, '\0', 100);
while (bRuning)
{
GlobalMemoryStatusEx(&memstatus);
availmb = int(memstatus.ullAvailPhys / 1024 / 1024);
sprintf_s(str, 100, "available memory is %dMB", availmb);
WriteToLog(str);
Sleep(SLEEP_TIME);
}
WriteToLog("service stopped");
}
void WINAPI ServiceCtrlHandler(DWORD Opcode)
{
switch (Opcode)
{
case SERVICE_CONTROL_STOP:
{
bRuning = FALSE;
m_ServiceStatus.dwCurrentState = SERVICE_STOPPED;
break;
}
case SERVICE_CONTROL_SHUTDOWN:
{
bRuning = FALSE;
m_ServiceStatus.dwCurrentState = SERVICE_STOPPED;
break;
}
default:
break;
}
SetServiceStatus(m_ServiceStatusHandle, &m_ServiceStatus);
}
BOOL InstallCmdService()
{
DWORD dw;
char strDir[1024];
SC_HANDLE schSCManager, schService;
LPCWSTR lpszBinaryPathName;
GetCurrentDirectory(1024, LPWSTR(strDir));
GetModuleFileName(NULL, LPWSTR(strDir), sizeof(strDir));
lpszBinaryPathName =LPCWSTR (strDir);
schSCManager = OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS);
if (schSCManager == NULL)
{
printf("open scmanager failed,maybe you do not have the previlage to do this \n");
return FALSE;
}
schService = CreateService(schSCManager, LPCWSTR("demo"), LPCWSTR("demo demo..."), SERVICE_ALL_ACCESS, SERVICE_WIN32_OWN_PROCESS, SERVICE_AUTO_START, SERVICE_ERROR_NORMAL, lpszBinaryPathName, NULL, NULL, NULL, NULL, NULL);
dw = GetLastError();
if (schService == NULL)
{
//程序卡到这一行,返回的句柄为空,不知道为什么创建服务失败,懂得大哥帮我看看,找了很多资料,都找不到原因,我用getlasterror 获取错误代码1073 显示服务已存在,但是我打开服务程序没有看到demo这个服务。如果用sc命令工具没有问题,用命令行参数在创建服务的时候失败了。求大哥门指点一下,萌新一个,讲的通俗一点。谢谢大家
printf("faint, we failed just becanuse we invoke createservice failed error number:%d\n",dw);
return FALSE;
}
CloseServiceHandle(schService);
return TRUE;
}
void DelService()
{
char name[100];
SC_HANDLE scm;
SC_HANDLE service;
SERVICE_STATUS status;
BOOL isSuccess = FALSE;
strcpy_s(name, "demo");
if ((scm = OpenSCManager(NULL, NULL, SC_MANAGER_CREATE_SERVICE)) == NULL)
{
printf("OpenSCManager Error");
return;
}
service = OpenService(scm, LPCWSTR(name), SERVICE_ALL_ACCESS | DELETE);
if (!service)
{
printf("OpenService error!");
return;
}
QueryServiceStatus(service, &status);
if (!isSuccess)
{
printf("QueryServiceStatus error!");
return;
}
if (status.dwCurrentState != SERVICE_STOPPED)
{
isSuccess = ControlService(service, SERVICE_CONTROL_STOP, &status);
if (!isSuccess)
{
printf("Stop Service error!");
return;
}
}
isSuccess = DeleteService(service);
if (!isSuccess)
{
printf("Dlete Service Fail!");
}
else
{
printf("Delete Service Success!");
}
CloseServiceHandle(service);
CloseServiceHandle(scm);
}


  • 加你妹的表情
  • 初级粉丝
    1
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼



登录百度账号

扫二维码下载贴吧客户端

下载贴吧APP
看高清直播、视频!
  • 贴吧页面意见反馈
  • 违规贴吧举报反馈通道
  • 贴吧违规信息处理公示
  • 1回复贴,共1页
<<返回win32吧
分享到:
©2025 Baidu贴吧协议|隐私政策|吧主制度|意见反馈|网络谣言警示