Windows服务操作技巧

伴随着研究Windows服务,逐渐掌握了一些小技巧,现在与大家分享一下。

将Windows服务转变为控制台程序

由于默认的Windows服务程序,编译后为Win32的窗口程序。我们在程序启动或运行过程中,如果想看到一些调试信息,那么就只能通过DebugView或者输出到日志的方式了。因为如果我们通过printf或者std::cout输出调试信息的话,Win32窗口程序是无法显示的。

此时,我们是多么怀念我们的经典的控制台程序啊,它可以很方便的将我们的调试信息输出出来,简直是太方便了。既然如此,那我们就让它一秒钟变格格吧,额,应该是一秒钟变控制台。

下面分享一下我的实现代码

Collapse#ifdef _DEBUG
//Debug版本,直接输出到控制台
#define OUT(s) printf_s(s);
#define OUT_LN(s) printf_s(s##"\r\n");
#else
//非Debug版本,则输出到调试器,一般使用DebugView
#define OUT(s) OutputDebugString(s);
#define OUT_LN(s) OutputDebugString(s);
#endif

class CServicesModule : public ATL::CAtlServiceModuleT< CServicesModule, IDS_SERVICENAME >
{
public :
    DECLARE_LIBID(LIBID_ServicesLib)
    DECLARE_REGISTRY_APPID_RESOURCEID(IDR_SERVICES, "{0794CF96-5CC5-432E-8C1D-52B980ACBE0F}")
        HRESULT InitializeSecurity() throw()
    {
        return S_OK;
    }
    //服务启动
    HRESULT Load();
    //服务停止
    HRESULT UnLoad();

    HRESULT Run(_In_ int nShowCmd = SW_HIDE) throw()
    {
        HRESULT hr = S_OK;
        OUT_LN("准备启动服务");
        hr = Load();
        if(hr)
        {
            OUT_LN("启动服务失败");
            return hr;
        }
        OUT_LN("Services服务已启动");

        hr = ATL::CAtlServiceModuleT< CServicesModule, IDS_SERVICENAME >::Run(nShowCmd);

        hr = UnLoad();
        OUT_LN("Services服务正常退出");
        return hr;
    }
};

CServicesModule _AtlModule;

//
#ifndef _DEBUG
//非Debug版本,编译为Win32程序
extern "C" int WINAPI _tWinMain(HINSTANCE /*hInstance*/, HINSTANCE /*hPrevInstance*/,
                                LPTSTR /*lpCmdLine*/, int nShowCmd)
{
    return _AtlModule.WinMain(nShowCmd);
}
#else
//Debug版本,编译为控制台程序
int _tmain(int argc, _TCHAR* argv[])
{
    return _AtlModule.WinMain(SW_SHOW);
}
#endif

HRESULT CServicesModule::Load()
{
    OUT_LN("服务正在启动");
    return 0;
}

HRESULT CServicesModule::UnLoad()
{
    OUT_LN("服务正在停止");
    return 0;
}

通过_DEBUG宏来区分是否编译成控制台程序。

当指定编译Debug版本时,可以将程序编译为控制台程序,通过RegServer注册服务,然后直接运行服务exe程序,这样通过printf输出的信息,就可以在控制台上显示了,如下图。

当指定编译Release版本时,将程序编译为Win32程序,通过Service注册服务,通过服务管理器管理服务的运行和停止。

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索控制台
, 程序
, debugview
, return
, hresult e_fail
, 服务
, 输出
, hresult
, Debug技巧
停止输出
windows10操作技巧、windows操作技巧、windows10操作小技巧、windows7操作技巧、windows10使用技巧,以便于您获取更多的相关知识。

时间: 2025-01-03 07:48:27

Windows服务操作技巧的相关文章

玩转Windows服务系列&amp;mdash;&amp;mdash;Windows服务小技巧

原文:玩转Windows服务系列--Windows服务小技巧 伴随着研究Windows服务,逐渐掌握了一些小技巧,现在与大家分享一下. 将Windows服务转变为控制台程序 由于默认的Windows服务程序,编译后为Win32的窗口程序.我们在程序启动或运行过程中,如果想看到一些调试信息,那么就只能通过DebugView或者输出到日志的方式了.因为如果我们通过printf或者std::cout输出调试信息的话,Win32窗口程序是无法显示的. 此时,我们是多么怀念我们的经典的控制台程序啊,它可以

windows服务操作之删除服务 批处理实现_DOS/BAT

将以下字符另存为一个批处理文件.bat 复制代码 代码如下: echo 正在停止服务... net stop TEST服务 echo 正在删除服务... sc delete TEST服务 echo 按任意键退出... pause sc帮助文件可以使用sc /? 获取错误: 未知命令 描述: SC 是用于与服务控制管理器通信的命令行程序. 用法: sc <server> [command] [service name] <option1> <option2>... 选项

50个Windows 8操作技巧

1.锁屏 启动之后,用户将首先看到Windows8的锁屏界面,每当系统启动.恢复或登录的时候,锁屏就会出现.如果您使用的是触摸屏设备,那么用手指一扫然后输入密码就可以登录系统.如果不是触摸屏设备,那么就用鼠标点击之后就能够登录系统. 2.Metro主屏 当用户登录Windows8系统之后,新的Metro启动屏幕就会出现,上面铺满了瓦片式的程序.当然了,如果您不喜欢某个应用程序,您也可以右击将其移除,然后按照自己的喜好重新排列应用程序的位置. 3.简化的开始菜单 Metro用户界面具备自己的开始菜

玩转Windows服务系列&amp;mdash;&amp;mdash;Debug、Release版本的注册和卸载,及其原理

原文:玩转Windows服务系列--Debug.Release版本的注册和卸载,及其原理 Windows服务Debug版本 注册 Services.exe -regserver 卸载 Services.exe -unregserver Windows服务Release版本 注册 Services.exe -service 卸载 Services.exe -unregserver 原理 Windows服务的Debug.Release版本的注册和卸载方式均已明确.但是为什么要这么做呢. 最初我在第一

玩转Windows服务系列&amp;mdash;&amp;mdash;命令行管理Windows服务

原文:玩转Windows服务系列--命令行管理Windows服务 说到Windows服务的管理就不得不说通过命令行的方式管理Windows服务,因为无论是系统管理员,还是通过编程的方式调用cmd命令,命令行都是非常方便以及强大的工具. 接下来就看一下如何通过cmd命令管理Windows服务. 管理Windows服务的主要cmd命令 管理Windows服务的命令应该有很多,但是我所了解到的命令主要有两个:sc.net. 说是两个cmd命令,实际就是windows的system32目录下的两个执行程

玩转Windows服务系列——无COM接口Windows服务启动失败原因及解决方案

原文:玩转Windows服务系列--无COM接口Windows服务启动失败原因及解决方案 将VS创建的Windows服务项目编译生成的程序,通过命令行 "服务.exe -Service"注册为Windows服务后,就可以通过服务管理器进行管理了. 问题 通过服务管理器进行启动的时候,发现服务无法启动,提示错误 由于程序代码是由VS的项目模板生成的,生成后直接编译为Debug版,然后通过命令行进行注册,期间并没有修改过任何代码. 难道是只有Release版本才能通过服务管理器启动吗.于是

玩转Windows服务系列&amp;mdash;&amp;mdash;服务运行、停止流程浅析

原文:玩转Windows服务系列--服务运行.停止流程浅析 通过研究Windows服务注册卸载的原理,感觉它并没有什么特别复杂的东西,Windows服务正在一步步退去它那神秘的面纱,至于是不是美女,大家可要睁大眼睛看清楚了. 接下来研究一下Windows服务的启动和停止的流程. 启动流程 启动时自然是从程序的入口点开始 extern "C" int WINAPI _tWinMain(HINSTANCE /*hInstance*/, HINSTANCE /*hPrevInstance*/

Windows 10在锁屏状态下打开某种应用程序的操作技巧

在Win10的锁屏界面,右下角有三个图标,中间有个像时钟的图标就是所谓的"轻松使用"按钮,里面有讲述人.放大镜.屏幕键盘等功能,这些功能我们可以修改成我们常用的应用程序,这样将大大的方便我们的操作,那么该如何修改呢? 默认情况下在锁屏界面点击右下角中间的图标会弹出"轻松使用"菜单 具体方法如下: 1.在Cortana搜索栏输入regedit,按回车键进入注册表编辑器; 2.定位到:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windo

Windows 7快捷键操作技巧

随着我们在电脑上安装各种程序,在桌面上.开始菜单里,繁杂的图标简直是眼花缭乱,有时候常用的程序都不容易找到.Win7中我们可以在属性设置中设置快捷键,让用户一键打开程序,解放了鼠标,快捷又方便. 先在开始菜单或者桌面上查找你想要快速启动的程序,右键点击选定的程序,打开属性设置窗口. 图示:右键打卡属性设置 这时我们会看到"快捷方式"选项卡,在"快捷键"一项中显示的是无,心急的朋友是否用鼠标点击,却发现无法删除和输入?其实不必使用Delete,我们只需要在点击输入框后