windows c语言 进程信息,C++

阅读: 评论:0

windows c语言 进程信息,C++

windows c语言 进程信息,C++

C语言实现在windows服务中新建进程的方法

本文实例讲述了C语言实现在windows服务中新建进程的方法。分享给大家供大家参考。具体如下:

运行环境:visual stdio 2008

文件名:testService.c

#include

#include

#include

#include

HANDLE hMutex;

SERVICE_STATUS ServiceStatus;

SERVICE_STATUS_HANDLE ServiceStatusHandle;

PROCESS_INFORMATION pi;

//Service Control Handler Function

void WINAPI CmdControl(DWORD dwCode)

{

switch(dwCode)

{

case SERVICE_CONTROL_PAUSE:

ServiceStatus.dwCurrentState = SERVICE_PAUSED;

break;

case SERVICE_CONTROL_CONTINUE:

ServiceStatus.dwCurrentState = SERVICE_RUNNING;

break;

case SERVICE_CONTROL_STOP:

WaitForSingleObject(hMutex,INFINITE);

//if (WaitForSingleObject(pi.hProcess, 5000) != WAIT_OBJECT_0)

TerminateProcess(pi.hProcess,0); //由于我自己在服务里建了一个进程,所以当服务停止时需要将建的进程也停掉

ServiceStatus.dwCurrentState = SERVICE_STOPPED;

ServiceStatus.dwWin32ExitCode = 0;

ServiceStatus.dwCheckPoint = 0;

ServiceStatus.dwWaitHint = 0;

if(SetServiceStatus(ServiceStatusHandle,&ServiceStatus)==0)

{

printf("SetServiceStatus in CmdControl in Switch Error !n");

}

return ;

case SERVICE_CONTROL_INTERROGATE:

break;

default:

break;

}

if(SetServiceStatus(ServiceStatusHandle,&ServiceStatus)==0)

{

printf("SetServiceStatus in CmdControl out Switch Error !n");

}

return ;

}

int WriteToLog(char* str)

{

FILE* log;

log = fopen("dma_ws.log", "a+");

if (log == NULL)

return -1;

fprintf(log, "%sn", str);

fclose(log);

return 0;

}

//Service ServiceMain Function

void WINAPI CmdStart(DWORD dwArgc,LPTSTR *lpArgv)

{

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;

ServiceStatusHandle=RegisterServiceCtrlHandler(TEXT("ntkrnl"),CmdControl); //注册控制响应程序

if (ServiceStatusHandle == 0)

{

printf("RegisterServiceCtrlHandler Error !n");

return ;

}

ServiceStatus.dwCurrentState = SERVICE_RUNNING;

ServiceStatus.dwCheckPoint = 0;

ServiceStatus.dwWaitHint = 0;

if(SetServiceStatus(ServiceStatusHandle,&ServiceStatus)==0)

{

printf("SetServiceStatus in CmdStart Error !n");

return ;

}

// 接下来可以做你要做的事了,我这里新建了一个进程

STARTUPINFO si;

ZeroMemory( &si, sizeof(si) );

si.cb = sizeof(si);

si.wShowWindow = true;

ZeroMemory( &pi, sizeof(pi) );

char buf[100] ={0};

TCHAR szCommandLine[] = TEXT("C:\Program Files (x86)\IronPython 2.7.1\ C:\DXMonitorSystem\DXHttpServer.py");

TCHAR cwd[] = TEXT("C:\DXMonitorSystem");

if (!CreateProcess(NULL, //在服务运行后新建了一个进程,实际的工作都由新建的进程完成

szCommandLine,

NULL,

NULL,

FALSE,

0,

NULL,

cwd, //这个参数必不可少,而且要是绝对路径,不然服务会找不到创建新进程所需文件所在目录

&si,

&pi))

{

sprintf(buf, "CreateProcess failed (%d).n", GetLastError());

WriteToLog(buf);

}

else

{

// 不使用的句柄最好关掉

//CloseHandle(pi.hThread);

//CloseHandle(pi.hProcess);

sprintf(buf, "new process ID:%dn",pi.dwProcessId);

sprintf(buf+strlen(buf), "new process master thread ID:%dn",pi.dwThreadId);

WriteToLog(buf);

}

WriteToLog("hello,worldn");

return ;

}

int main()

{

SERVICE_TABLE_ENTRY DispatchTable[] =

{

{TEXT("ntkrnl"),CmdStart},

{NULL ,NULL }

};

StartServiceCtrlDispatcher(DispatchTable);

//注意:CmdStart函数

return 0;

}

使用方法:

安装服务:sc create testService binpath= c:

删除服务: sc delete testService

希望本文所述对大家的C语言程序设计有所帮助。相关阅读:

jquery五角星评分插件示例分享

iOS开发之路--微博OAuth授权_取得用户授权的accessToken

win10系统的电脑怎么限制别人使用的时间?

Win10 Server预览版10147大量截图曝光

设置contenteditable属性可编辑HTML标签的内容(可代替textarea)

win10文件夹打不开显示正在处理中该怎么办?

Javascript闭包用法实例分析

Android GPS定位测试(附效果图和示例)

原生JS实现风箱式demo,并封装了一个运动框架(实例代码)

php实现SAE上使用storage上传与下载文件的方法

CSS3新属性transition-property transform box-shadow实例学习

SQL_Server全文索引的用法解析

Android 广播大全 Intent Action 事件详解

Mac下怎么给文件添加注释以方便管理

本文发布于:2024-01-29 00:20:18,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170645882311360.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:进程   语言   信息   windows
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23