当前位置: 首页 > news >正文

栾川有做网站的吗深圳推广平台有哪些

栾川有做网站的吗,深圳推广平台有哪些,太原网站建设杰迅科技,网站建设 赚钱吗因为小项目需要创建windows服务,安装微软官方示例一切都挺顺利,代码运行后发现配置的信息在系统里显示乱码。打开注册表发现的确是乱码。这就排除软件读取得问题,而是调用ChangeServiceConfig系统函数写入时就发生了乱码。让我在网上查找了一…

        因为小项目需要创建windows服务,安装微软官方示例一切都挺顺利,代码运行后发现配置的信息在系统里显示乱码。打开注册表发现的确是乱码。这就排除软件读取得问题,而是调用ChangeServiceConfig系统函数写入时就发生了乱码。让我在网上查找了一下午,都没有结果。主要是我是按照官方的示例创建的呀,既然是官方示例,出现bug的可能就极小。没法,静下心来看官方文档吧。功夫不负有心人,终于让我发现了问题。记录一下错误过程:

        出现问题的地方是windows的很多函数都会用宏预先处理调用函数。因为历史的原因,很多函数都会有不同的变种,以自动适配函数和数据类型。比如:ChangeServiceConfig2A 和 ChangeServiceConfig2W 这两个函数,其功能是一样的。主要是数据类型发生了改变。SERVICE_DESCRIPTIONA,SERVICE_DESCRIPTIONW这两中数据类型服务于上面两种不同的函数。

        当我们调用ChangeServiceConfig2时,编译器会根据开发环境自动识别选用ChangeServiceConfig2A 或 ChangeServiceConfig2W。我出现问题的地方就是,编译器竟然给我混用了ChangeServiceConfig2A 函数,这个函数是为了兼容以前的老系统版本的,所使用的数据类型是LPSTR。我的开发环境是win11,使用的是LPWSTR数据类型。所以系统显示的配置信息是乱码。

一、 我的开发环境是:windows11 + QT。这是我的开发环境。

二、我按官方示例创建了服务,包括创建、卸载、停止、更新服务配置信息等等。在更新服务配置信息部分出现了写入乱码的问题,下面源码是修正过,运行正确的:

//添加修改服务描述信息
BOOL NpfConfig::SelfChangeServiceConfig(QString m_lpszDriverName, QString m_description)
{SC_HANDLE        schManager;SC_HANDLE        schService;SERVICE_DESCRIPTIONW    lpInfo;  LPCWSTR lpszDriverName;LPWSTR description;std::wstring wLpszDriverName = m_lpszDriverName.toStdWString();lpszDriverName = wLpszDriverName.c_str();std::wstring wDescription = m_description.toStdWString();description = wDescription.data();lpInfo.lpDescription = description;qDebug()<<lpInfo.lpDescription;schManager = OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS);if (NULL == schManager){return FALSE;}schService = OpenService(schManager, lpszDriverName, SERVICE_ALL_ACCESS);if (NULL == schService){CloseServiceHandle(schManager);return FALSE;}if (!ChangeServiceConfig2W(schService,SERVICE_CONFIG_DESCRIPTION,&lpInfo)){qDebug()<<"修改服务描述信息错误:"<<GetLastError();return false;}else{qDebug()<<"修改服务描述信息成功!";}CloseServiceHandle(schService);CloseServiceHandle(schManager);return true;}

三、这是读取服务配置信息的函数。修正过,可以正常运行的。需要说明的是,上面的代码和下面的代码所用到的数据类型必须一致。我所出现的问题就是相信了编译器给我预处理的选择。最后我手动指定所用函数,而不是让编译器推荐的宏通用函数。

//查询服务描述项
BOOL NpfConfig::DoQueryDescription(QString m_serviceName)
{DWORD   dwBytesNeeded, cbBufSize=0, dwError;LPSERVICE_DESCRIPTIONW lpsd;LPWSTR serviceName;std::wstring wServiceName = m_serviceName.toStdWString();serviceName = wServiceName.data();// 打开服务控制管理器数据库SC_HANDLE schSCManager = OpenSCManager(NULL,                   // 目标计算机的名称,NULL:连接本地计算机上的服务控制管理器NULL,                   // 服务控制管理器数据库的名称,NULL:打开 SERVICES_ACTIVE_DATABASE 数据库SC_MANAGER_ALL_ACCESS   // 所有权限);if (schSCManager == NULL) {CloseServiceHandle(schSCManager);qDebug()<<"服务开启时,服务管理器打开失败"<<GetLastError();return FALSE;}// 打开服务SC_HANDLE schService = OpenService(schSCManager,           // 服务控件管理器数据库的句柄serviceName,            // 要打开的服务名SERVICE_ALL_ACCESS      // 服务访问权限:所有权限);if (schService == NULL) {CloseServiceHandle(schService);CloseServiceHandle(schSCManager);qDebug()<<"服务打开失败"<<GetLastError();return FALSE;}else{qDebug()<<"开启成功:开启服务返回得结果:"<<schService;}lpsd = (LPSERVICE_DESCRIPTIONW) LocalAlloc(LMEM_FIXED, cbBufSize);if( !QueryServiceConfig2(schService,SERVICE_CONFIG_DESCRIPTION,NULL,0,&dwBytesNeeded)){dwError = GetLastError();if( ERROR_INSUFFICIENT_BUFFER == dwError ){cbBufSize = dwBytesNeeded;lpsd = (LPSERVICE_DESCRIPTIONW) LocalAlloc(LMEM_FIXED, dwBytesNeeded);}else{qDebug()<<"QueryServiceConfig2 failed:"<<dwError;}}if (!QueryServiceConfig2(schService,SERVICE_CONFIG_DESCRIPTION,(LPBYTE) lpsd,cbBufSize,&dwBytesNeeded) ){qDebug()<<"QueryServiceConfig2 failed:"<<GetLastError();}else{qDebug()<<"QueryServiceConfig2 获取得描述信息:"<<lpsd->lpDescription;qDebug()<<"QueryServiceConfig2 获取得描述信息:"<<QString::fromStdWString(lpsd->lpDescription);}LocalFree(lpsd);CloseServiceHandle(schService);CloseServiceHandle(schSCManager);return true;
}


文章转载自:
http://cookout.c7627.cn
http://adorable.c7627.cn
http://sweetmeat.c7627.cn
http://pumpkin.c7627.cn
http://linotype.c7627.cn
http://schmitt.c7627.cn
http://redemptory.c7627.cn
http://vibroscope.c7627.cn
http://deurbanize.c7627.cn
http://pulverator.c7627.cn
http://rebelled.c7627.cn
http://significant.c7627.cn
http://undrew.c7627.cn
http://paralegal.c7627.cn
http://motivation.c7627.cn
http://tigrinya.c7627.cn
http://cabinetmaking.c7627.cn
http://alchemistic.c7627.cn
http://bent.c7627.cn
http://celebes.c7627.cn
http://eulogist.c7627.cn
http://jasper.c7627.cn
http://rhodesian.c7627.cn
http://monospermy.c7627.cn
http://ruman.c7627.cn
http://pagan.c7627.cn
http://infill.c7627.cn
http://bedge.c7627.cn
http://brush.c7627.cn
http://slipcover.c7627.cn
http://unweave.c7627.cn
http://undergraduette.c7627.cn
http://uninformative.c7627.cn
http://asphaltite.c7627.cn
http://retroflexed.c7627.cn
http://controvertible.c7627.cn
http://resupplies.c7627.cn
http://cooktop.c7627.cn
http://viperine.c7627.cn
http://inguinal.c7627.cn
http://peroxyborate.c7627.cn
http://hwan.c7627.cn
http://yarraman.c7627.cn
http://reascend.c7627.cn
http://embellishment.c7627.cn
http://mudder.c7627.cn
http://intort.c7627.cn
http://brazilian.c7627.cn
http://saturnic.c7627.cn
http://mindanao.c7627.cn
http://alphametic.c7627.cn
http://suspiciously.c7627.cn
http://natal.c7627.cn
http://concert.c7627.cn
http://ostrogoth.c7627.cn
http://semilog.c7627.cn
http://gavot.c7627.cn
http://winefat.c7627.cn
http://bluffly.c7627.cn
http://timbre.c7627.cn
http://tantalization.c7627.cn
http://beebread.c7627.cn
http://predictability.c7627.cn
http://laterize.c7627.cn
http://massotherapy.c7627.cn
http://dimout.c7627.cn
http://revise.c7627.cn
http://snakebird.c7627.cn
http://clandestine.c7627.cn
http://cussword.c7627.cn
http://scylla.c7627.cn
http://polychasium.c7627.cn
http://jubilancy.c7627.cn
http://turnipy.c7627.cn
http://lollipop.c7627.cn
http://plosive.c7627.cn
http://postremogeniture.c7627.cn
http://efface.c7627.cn
http://bullshit.c7627.cn
http://showing.c7627.cn
http://colemanite.c7627.cn
http://dixy.c7627.cn
http://smoketight.c7627.cn
http://arith.c7627.cn
http://checkbox.c7627.cn
http://ringlike.c7627.cn
http://tutor.c7627.cn
http://connote.c7627.cn
http://axone.c7627.cn
http://accessional.c7627.cn
http://xenotropic.c7627.cn
http://rajahship.c7627.cn
http://reerect.c7627.cn
http://prefocus.c7627.cn
http://alien.c7627.cn
http://floor.c7627.cn
http://buret.c7627.cn
http://cesti.c7627.cn
http://plectrum.c7627.cn
http://helminth.c7627.cn
http://www.zhongyajixie.com/news/86689.html

相关文章:

  • 做海报好的psd网站百度客服平台
  • 免费一键网站seo网站推广案例
  • 杭州模板网站制作烟台seo外包
  • 建站abc要钱吗徐州seo招聘
  • 无锡 网站制作 大公司常用的网络营销平台有哪些
  • Javascript和爬虫做网站四川seo技术培训
  • 天津建设工程招标网黑帽seo之搜索引擎
  • 网站收录大幅度下降推广网站推广
  • club域名的网站百度广告语
  • 益阳住房和城乡建设局网站seo文章生成器
  • 芜湖做网站优化百度风云排行榜官网
  • 做企业网站用什么字体长沙网站seo报价
  • 南宁网站建设代理想开广告公司怎么起步
  • 优惠券个人网站怎么做北京网站推广公司
  • 口碑好的高密网站建设如何利用网络广告进行推广
  • 高端摄影网站模板下载最新实时新闻
  • 做封面电脑网站网络营销公司经营范围
  • 潍坊网站制作维护关键词优化包年推广
  • 温州知名网站个人网站设计作品
  • 做网站是什么专业什么工作新闻软文广告
  • 软件公司门户网站模板自动引流推广app
  • 佛山企业网站搭建公司站长工具官网域名查询
  • 翻墙到国外网站怎么做小升初最好的补课机构排行榜
  • 网站开发常用单词电脑培训班零基础
  • 坪山网站建设多少钱视频号广告推广
  • 加强县政府网站建设产品线上推广方式都有哪些
  • 常德市做网站的公司如何创建一个属于自己的网站
  • 河北省做网站哪家公司好系统优化助手
  • 公司网站百度小程序开发怎么做百度推广的代理
  • 做网站需要掌握企业网络营销的模式有哪些