如何应用VS2010中来创建Windows服务程序

如何应用VS2010中来创建Windows服务程序,第1张

1,new project ->选择 ATL Project, 设置工程名,如:PureSsl

2,在向导的“Application Setting”页,“Application Type”项选择: Service(EXE)

3, 更改主文件PureSsl.cpp,如下:

// PureSsl.cpp : Implementation of WinMain

#include "stdafx.h"

#include "resource.h"

#include "PureSsl_i.h"

#include <atlcomcli.h>

#include <stdio.h>

class CPureSslModule : public ATL::CAtlServiceModuleT<CPureSslModule, IDS_SERVICENAME >

{

public :

DECLARE_LIBID(LIBID_PureSslLib)

DECLARE_REGISTRY_APPID_RESOURCEID(IDR_PURESSL, "{A0D1CDBB-EE9F-4110-9710-498FEB5194F5}")

HRESULT InitializeSecurity() throw()

{

// TODO : Call CoInitializeSecurity and provide the appropriate security settings for your service

// Suggested - PKT Level Authentication,

// Impersonation Level of RPC_C_IMP_LEVEL_IDENTIFY

// and an appropiate Non NULL Security Descriptor.

return S_OK

}

HRESULT RegisterAppId(bool bService = false) throw ()

HRESULT PreMessageLoop(int nShowCmd) throw()

HRESULT PostMessageLoop() throw()

void OnStop() throw()

void OnPause() throw()

void OnContinue() throw()

}

HRESULT CPureSslModule::RegisterAppId(bool bService ) throw ()

{

HRESULT hr = S_OK

BOOL res = __super ::RegisterAppId(bService)

if (bService)

{

if (IsInstalled())

{

SC_HANDLE hSCM = ::OpenSCManagerW(NULL, NULL, SERVICE_CHANGE_CONFIG)

SC_HANDLE hService = NULL

if (hSCM == NULL)

{

hr = ATL::AtlHresultFromLastError()

}

else

{

hService = ::OpenService(hSCM, m_szServiceName, SERVICE_CHANGE_CONFIG)

if (hService != NULL)

{

::ChangeServiceConfig(hService, SERVICE_NO_CHANGE,

SERVICE_AUTO_START,// 修改服务为自动启动

NULL, NULL, NULL, NULL, NULL, NULL, NULL,

m_szServiceName)// 通过修改资源IDS_SERVICENAME 修改服务的显示名字

SERVICE_DESCRIPTION Description

TCHAR szDescription[1024]

ZeroMemory(szDescription, 1024)

ZeroMemory(&Description, sizeof (SERVICE_DESCRIPTION))

lstrcpy(szDescription, _T("测试服务描述信息" ))

Description.lpDescription = szDescription

::ChangeServiceConfig2(hService, SERVICE_CONFIG_DESCRIPTION, &Description)

::CloseServiceHandle(hService)

}

else

{

hr = ATL::AtlHresultFromLastError()

}

::CloseServiceHandle(hSCM)

}

}

}

return hr

}

HRESULT CPureSslModule::PreMessageLoop(int nShowCmd) throw()

{

// 让暂停继续按钮可以使用

m_status.dwControlsAccepted = m_status.dwControlsAccepted | SERVICE_ACCEPT_PAUSE_CONTINUE

HRESULT hr = __super::PreMessageLoop(nShowCmd)

// 微软Bug

if (hr == S_FALSE)

hr = S_OK

// 这里添加自己的初始化代码...

if (SUCCEEDED(hr))

{

// 这个状态一定要修改,否则会出现1053错误,

// 这个错误我花了很多时间才搞定

SetServiceStatus(SERVICE_RUNNING)

}

return hr

}

HRESULT CPureSslModule::PostMessageLoop() throw()

{

HRESULT hr = __super ::PostMessageLoop()

if (FAILED(hr))

return hr

// 这里添加自己的清除代码

return hr

}

void CPureSslModule::OnStop() throw()

{

__super::OnStop()

SetServiceStatus(SERVICE_STOPPED)

}

void CPureSslModule::OnPause() throw()

{

__super::OnPause()

SetServiceStatus(SERVICE_PAUSED)

}

void CPureSslModule::OnContinue() throw()

{

__super::OnContinue()

SetServiceStatus(SERVICE_RUNNING)

}

CPureSslModule _AtlModule

//

extern "C" int WINAPI _tWinMain(HINSTANCE /*hInstance*/, HINSTANCE /*hPrevInstance*/,

LPTSTR /*lpCmdLine*/, int nShowCmd)

{

return _AtlModule.WinMain(nShowCmd)

}

4, 编译并设置服务

当ATL COM对象生成作为服务,它才会注册为本地服务器,并且,在控制面板不会出现在服务列表。这是因为,调试服务作为本地服务器上作为服务更为方便。若要安装它作为服务,请运行以下命令提示:

YourEXE.exe /Service

若要卸载该文件,请运行以下 *** 作:

YourEXE.exe /UnregServer

打开cmd窗口,进入生成的PureSsl.exe所在的目录执行:

> PureSsl.exe /service

>net start PureSsl

即可将服务设置到服务管理器,并启动它。

要删除服务:

>sc delete PureSsl

5, 注意

未经第4步直接运行会报以下错误:

The program '[24636] PureSsl.exe: Native' has exited with code 2 (0x2).

若要直接在vs中调试运行应当执行:

YourEXE.exe /UnregServer

否则会报

First-chance exception at 0x75c49673 in CloudS.exe: 0x00000005: 拒绝访问。.

The thread 'Win32 Thread' (0x314) has exited with code 1063 (0x427).

紧凑型SUV这个细分领域可谓常年“硝烟四起”没有一个品牌敢掉以轻心,这对于消费者来说绝对是个好消息。作为捷达旗下车型中的一份子,捷达VS52021款三十周年纪念版自动悦享型是不少消费者想购买的车型,接下来小编就为大家简单介绍一下这款车,顺便再算一算它的落地价吧。

接下来看下配置,捷达VS5配备了主/副驾安全气囊、胎压报警、前排侧气囊。此外,这款车还配备了定速巡航、雨量感应式雨刷、上坡辅助等八项舒适性配置。

来看看大家关心的落地价,捷达VS52021款三十周年纪念版自动悦享型的官方指导价为102800元,目前杭州市部分经销商有最高3000元左右的优惠,所以这款车型的裸车价格为99800元,购置税和车船税等必要花费10632元,再加上商业保险5137元,最终的全款落地价为115569元。

总的来说,捷达VS5的产品力还是有一定市场竞争力的,你会花这个价格购买这款车吗?欢迎大家在评论区说说你的看法!

(图/文/摄:太平洋汽车网问答叫兽)


欢迎分享,转载请注明来源:内存溢出

原文地址: https://www.outofmemory.cn/yw/8106462.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-13
下一篇 2023-04-13

发表评论

登录后才能评论

评论列表(0条)

保存