Windows服务中读取配置文件的方法
来源:互联网 发布:刺客信条叛变好玩知乎 编辑:程序博客网 时间:2024/05/16 00:34
最近做DSS开发,临近尾声,准备将DSS以服务的形式部署于目标机器中,但读取配置文件这等小事却也有时候会颇费时间,主要目的是让服务程序读取服务可执行文件同目录中的配置文件,基于前人代码基础上,适用于DSS服务,闲话少说,直接贴代码:
bool bPathGet = false;char theConfigFilePath[MAX_PATH] = {0};char theXMLFilePath[MAX_PATH] = {0}; #ifdef WIN32 //适用于Win32服务程序SC_HANDLE SCMan = OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS); //打开系统服务控制器if(SCMan == NULL){printf("OpenSCManager Error\n");return -1;}LPENUM_SERVICE_STATUS service_status; //保存系统服务的结构DWORD cbBytesNeeded = NULL; DWORD ServicesReturned = NULL;DWORD ResumeHandle = NULL;service_status = (LPENUM_SERVICE_STATUS)LocalAlloc(LPTR, 1024 * 64);//分配内存,注意大小//获取系统服务的简单信息bool ESS = EnumServicesStatus(SCMan, //系统服务句柄SERVICE_WIN32, //服务的类型SERVICE_STATE_ALL, //服务的状态(LPENUM_SERVICE_STATUS)service_status, //输出参数,系统服务的结构1024 * 64, // 结构的大小&cbBytesNeeded, //输出参数,接收返回所需的服务&ServicesReturned, //输出参数,接收返回服务的数量&ResumeHandle); //输入输出参数,第一次调用必须为0,返回为0代表成功if(ESS == NULL) {printf("EnumServicesStatus Error\n");return -1;}for(int i = 0; i < ServicesReturned; i++){if(::strcmp("StreamingServer",service_status[i].lpServiceName) != 0)//注意!服务名称为"StreamingServer"continue;LPQUERY_SERVICE_CONFIG lpServiceConfig = NULL;//服务详细信息结构SC_HANDLE service_curren = NULL;//当前的服务句柄service_curren = OpenService(SCMan, service_status[i].lpServiceName, SERVICE_QUERY_CONFIG); //打开当前服务lpServiceConfig = (LPQUERY_SERVICE_CONFIG)LocalAlloc(LPTR, 8 * 1024); //分配内存, 最大为8kb if(NULL == QueryServiceConfig(service_curren, lpServiceConfig, 8 * 1024, &ResumeHandle)){printf("QueryServiceConfig Error\n");return -1;}//char szFullPath[MAX_PATH] = {0};//::GetModuleFileName(NULL,szFullPath,MAX_PATH);char szDriver[MAX_PATH] = {0};char szFileName[MAX_PATH] = {0};char szDir[MAX_PATH] = {0};::_splitpath(lpServiceConfig->lpBinaryPathName, szDriver, szDir, szFileName,NULL);sprintf(theConfigFilePath, "%s%s%s",szDriver,szDir,"streamingserver.cfg");sprintf(theXMLFilePath,"%s%s%s",szDriver,szDir,"streamingserver.ini");bPathGet = true;CloseServiceHandle(service_curren);break;//关闭当前服务的句柄}CloseServiceHandle(SCMan);//关闭服务管理器的句柄#endifif(!bPathGet){sprintf(theConfigFilePath, "%s","streamingserver.cfg");sprintf(theXMLFilePath,"%s","streamingserver.ini");}
很简单的一个点,windows服务程序读取相对路径,其./ home路径在 <System>/Windows/system32路径,所以当我们读取./xxx.ini时,读取到的路径在system32路径下,通常我们不会把配置文件放这的,所以就按照我上述的方法,先找到服务,再根据服务信息找到可执行程序的路径,再在相同路径下找到配置文件,希望能够帮助大家应用到其他方面.
------------------------------------------------------------
本文转自www.easydarwin.org,更多开源流媒体解决方案,请关注我们的微信:EasyDarwin
- Windows服务中读取配置文件的方法
- vc中读取配置文件的方法
- vc中读取配置文件的方法
- java中读取配置文件的方法
- linux中读取配置文件的方法
- java中读取配置文件的方法
- java中读取配置文件的方法
- java中读取配置文件的方法
- java中读取配置文件的方法
- 读取配置文件的方法
- java中读取配置文件中数据的具体方法
- 从spring配置文件中读取bean的方法
- .net中webform,winform读取xml配置文件的方法
- java中读取配置文件信息的六种方法
- java中读取配置文件信息的六种方法
- java读取项目中配置文件的几种方法
- web和winform中读取config配置文件的方法
- mybatis测试中读取主配置文件的两种方法
- 完全卸载oracle
- 优化pxe网启动时tftp的传输速度 --- 针对pxelinux和bootmgr
- Linux下网络IP地址的转换函数(点分式--长整型转换)
- yum常用命令集锦
- Andorid简单应用理财工具-初始化数据
- Windows服务中读取配置文件的方法
- 软件随想录(local.joelonsoftware.com/wiki)-2000年10月15日 无痛功能规格 - 第四篇: 提示 - Painless Functional Specificatio
- 思科协议总结大全
- 思科设备型号编码详解
- 周鸿祎的创新
- Delphi ScktSrvr.exe程序修改版
- OSPF多区域原理与配置
- ping程序的实现
- Tomcat网站发布配置方案