精华内容
下载资源
问答
  • 用c语言编写windows服务器用c语言编写windows服务器前一段时间我写了一篇通过写服务的形式来达到一些监视程序运行的目的的文章,至于如何在windows下写服务我没有详细介绍,今天就让我们一起看看如何来写服务程序。...

    用c语言编写windows服务器

    用c语言编写windows服务器

    前一段时间我写了一篇通过写服务的形式来达到一些监视程序运行的目的的文章,至于如何在windows下写服务我没有详细介绍,今天就让我们一起看看如何来写服务程序。

    Windows 服务被设计用于需要在后台运行的应用程序以及实现没有用户交互的任务。为了学习这种控制台应用程序的基础知识,C(不是C++)是最佳选择。本文将建立并实现一个简单的服务程序,其功能是查询系统中可用物理内存数量,然后将结果写入一个文本文件。最后,你可以用所学知识编写自己的 Windows 服务。

    当初我写第一个 NT 服务时,我到 MSDN 上找例子。在那里我找到了一篇 Nigel Thompson 写的文章:“Creating a Simple Win32 Service in C++”,这篇文章附带一个 C++ 例子。虽然这篇文章很好地解释了服务的开发过程,但是,我仍然感觉缺少我需要的重要信息。我想理解通过什么框架,调用什么函数,以及何时调用,但 C++ 在这方面没有让我轻松多少。面向对象的方法固然方便,但由于用类对底层 Win32 函数调用进行了封装,它不利于学习服务程序的基本知识。这就是为什么我觉得 C 更加适合于编写初级服务程序或者实现简单后台任务的服务。在你对服务程序有了充分透彻的理解之后,用 C++ 编写才能游刃有余。当我离开原来的工作岗位,不得不向另一个人转移我的知识的时候,利用我用 C 所写的例子就非常容易解释 NT 服务之所以然。

    服务是一个运行在后台并实现勿需用户交互的任务的控制台程序。Windows NT/2000/XP 操作系统提供为服务程序提供专门的支持。人们可以用服务控制面板来配置安装好的服务程序,也就是 Windows 2000/XP 控制面板|管理工具中的“服务”(或在“开始”|“运行”对话框中输入 services.msc /s——译者注)。可以将服务配置成操作系统启动时自动启动,这样你就不必每次再重启系统后还要手动启动服务。

    本文将首先解释如何创建一个定期查询可用物理内存并将结果写入某个文本文件的服务。然后指导你完成生成,安装和实现服务的整个过程。

    第一步:主函数和全局定义

    首先,包含所需的头文件。例子要调用 Win32 函数(windows.h)和磁盘文件写入(stdio.h):

    #include

    #include

    接着,定义两个常量:

    #define SLEEP_TIME 5000

    #define LOGFILE "C:\\MyServices\\memstatus.txt"

    SLEEP_TIME 指定两次连续查询可用内存之间的毫秒间隔。在第二步中编写服务工作循环的时候要使用该常量。

    LOGFILE 定义日志文件的路径,你将会用 WriteToLog 函数将内存查询的结果输出到该文件,WriteToLog 函数定义如下:

    int WriteToLog(char* str)

    {

    FILE* log;

    log = fopen(LOGFILE, "a+");

    if (log == NULL)

    return -1;

    fprintf(log, "%s\n", str);

    fclose(log);

    return 0;

    }

    声明几个全局变量,以便在程序的多个函数之间共享它们值。此外,做一个函数的前向定义:

    SERVICE_STATUS ServiceStatus;

    SERVICE_STATUS_HANDLE hStatus;

    void ServiceMain(int argc, char** argv);

    void ControlHandler(DWORD request);

    int InitService();

    现在,准备工作已经就绪,你可以开始编码了。服务程序控制台程序的一个子集。因此,开始你可以定义一个 main 函数,它是程序的入口点。对于服务程序来说,main 的代码令人惊讶地简短,因为它只创建分派表并启动控制分派机。

    void main()

    {

    SERVICE_TABLE_ENTRY ServiceTable[2];

    ServiceTable[0].lpServiceName = "MemoryStatus";

    ServiceTable[0].lpServiceProc = (LPSERVICE_MAIN_FUNCTION)ServiceMain;

    ServiceTable[1].lpServiceName = NULL;

    ServiceTable[1].lpServiceProc = NULL;

    // 启动服务的控制分派机线程

    展开全文
  • 主要介绍了Windows系统下使用C语言编写单线程的文件备份程序,文中给出了实现的几个关键代码片段,剩下的只要套上main和线程调用的相关函数即可,非常详细,需要的朋友可以参考下
  • GLMaze:GLMaze是使用OpenGL用C语言编写Windows 95 Maze屏幕保护程序克隆
  • 这是一个使用C语言创建空白窗口的基本框架代码案例。#include #include //窗体备用HWND g_hwnd;HINSTANCE g_hInstance;//过程函数LRESULT CALLBACK WinProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam){...

    这是一个使用C语言创建空白窗口的基本框架代码案例。

    #include

    #include

    //窗体备用

    HWND g_hwnd;

    HINSTANCE g_hInstance;

    //过程函数

    LRESULT CALLBACK WinProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)

    {

    switch (uMsg)

    {

    case WM_DESTROY://销毁窗体

    PostQuitMessage(0);

    break;

    default:

    return DefWindowProc(hwnd, uMsg, wParam, lParam);

    }

    return 0;

    }

    //主函数

    int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrecInstance, LPSTR lpCmdLine, int nCmdShow)

    {

    //定义填充窗口

    WNDCLASSEX wcex;

    wcex.cbSize = sizeof(WNDCLASSEX);

    wcex.style = CS_VREDRAW | CS_HREDRAW;

    wcex.lpfnWndProc = WinProc;

    wcex.cbClsExtra = 0;

    wcex.cbWndExtra = 0;

    wcex.hInstance = hInstance;

    wcex.hIcon = LoadIcon(NULL, IDI_APPLICATION);

    wcex.hCursor = LoadCursor(NULL, IDC_ARROW);

    wcex.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH);

    wcex.lpszMenuName = NULL;

    wcex.lpszClassName = TEXT("WinApp");

    wcex.hIconSm = LoadIcon(NULL, IDI_APPLICATION);

    //注册窗口类

    if (!RegisterClassEx(&wcex))

    {

    return 0;

    }

    g_hInstance = hInstance;

    //创建窗口

    HWND hwnd;

    if (!(hwnd = CreateWindowEx(0, TEXT("WinApp"), TEXT("HelloWord"), WS_OVERLAPPEDWINDOW,

    0, 0, 800, 600, NULL, NULL, hInstance, NULL)))

    {

    return 0;

    }

    g_hwnd = hwnd;

    //显示更新窗口

    ShowWindow(hwnd, nCmdShow);

    UpdateWindow(hwnd);

    //消息循环

    MSG msg;

    while (GetMessage(&msg, NULL, 0, 0))

    {

    TranslateMessage(&msg);

    DispatchMessage(&msg);

    }

    return msg.wParam;

    }

    展开全文
  • 使用C语言编写windows服务一般框架 原文: 使用C语言编写windows服务一般框架 编写windows服务和编写windows应用程序一样,有一些回调函数必须填写且向windows 服务管理器(service manager)...
    原文: 使用C语言编写windows服务一般框架

       编写windows服务和编写windows应用程序一样,有一些回调函数必须填写且向windows 服务管理器(service manager)进行注册,否则会导致服务启动失败。因近期写个服务,其中遇到一些有问题,有部分内容想和大家分享一下,请大家指正。
            windows服务一般框架代码如下:

    #include <Windows.h>
    #include <tchar.h>

    VOID WINAPI ServiceHandler(DWORD dwControl)

    {

    switch (dwControl)

    {

    case SERVICE_CONTROL_STOP:

    {

    ExitProcess(0);

    }

    break;

    }

    }

    DWORD WINAPI ThreadFunc(PVOID pv)

    {

    Sleep(2*1000);

    return TerminateProcess(GetCurrentProcess(),1);

    }

    VOID WINAPI ServiceMain(DWORD  dwNumServicesArgs,PSTR *ppcServiceArgVectors)

    {

    SERVICE_STATUS_HANDLE hService = NULL;

      //如果下面不初始化,导致service manager无法收到消息

    SERVICE_STATUS SrvStatus = {0};

    OutputDebugStringA("service main.....");

    hService= RegisterServiceCtrlHandlerA("winservice",ServiceHandler);

    SrvStatus.dwServiceType  = SERVICE_WIN32_OWN_PROCESS;

    SrvStatus.dwCurrentState= SERVICE_RUNNING;

     //服务接受停止的控制,如果你不想让别人停止你的服务,下面这行代码可以删除

    SrvStatus.dwControlsAccepted = SERVICE_ACCEPT_STOP; 

    SetServiceStatus(hService,&SrvStatus);

     //这句话也很重要,我刚开始就是没这句话,导致服务不能启动

    CreateThread(0,0,ThreadFunc,0,0,0);//线程只是一个示例,2S后,服务启动后自动退出

    return;

    }


    int _tmain(int argc, _TCHAR* argv[])

    {

    SERVICE_TABLE_ENTRYA scArrTable[] = 

    {

    {"winservice",ServiceMain},

    {NULL,NULL}

    };

    StartServiceCtrlDispatcherA(scArrTable);

    return 0;

    }
    以上实例,仅供参考。
    大家可以将编译后的exe使用如下命令行进行服务的注册:
     sc create "windowsservice" binPath= "windowssrv.exe"           //“binPath=”这个等于符号后有个空格,否则无法注册服务,请将windowssrv.exe改为你自己EXE所在全路径。

    posted on 2014-12-16 08:11 NET未来之路 阅读(...) 评论(...) 编辑 收藏

    转载于:https://www.cnblogs.com/lonelyxmas/p/4166271.html

    展开全文
  • 用C语言编写Windows服务程序的五个步骤
  • 主要是根据从www.vcbase.com上看到的一篇文章来做这个windows服务的。但是这篇文章一些关键代码并没有贴出来,然而有心人根据作者的描述实现了代码,并且完整的贴了出来,地址是在...

    主要是根据从www.vcbase.com上看到的一篇文章来做这个windows服务的。但是这篇文章一些关键代码并没有贴出来,然而有心人根据作者的描述实现了代码,并且完整的贴了出来,地址是在 http://www.2cto.com/kf/201111/111990.html

    我创建的是一个空项目,这个默认的应该是控制台项目。服务的主函数是main而不是winmain,要写一个服务首先要初始化一个SERVICE_TABLE_ENTRY 分派表结构体的列表,然后调用StartServiceCtrlDispatcher();这将把调用进程的主线程转换为控制分派器。该分派器启动一个新线程,该线程运行分派表中对应于你的服务的ServiceMain()函数。在这之后系统将自动创建一个线程去执行ServiceMain函数的内容,你应该将你要执行的任务在ServiceMain中循环,这样服务就开始运行了。

    ServiceMain函数为void WINAPI ServiceMain(int argc, char** argv)格式的函数在ServiceMain执行你的任务前,需要给SERVICE_TABLE_ENTRY 分派表结构体进行赋值,注意由于此时服务还没有开始执行你的任务所以我们将服务的状态设置为SERVICE_START_PENDING,即正在初始化,然后注册控制处理函数hstatus = ::RegisterServiceCtrlHandler("SCProgressLog", CtrlHandler);最后一个参数是一个函数,函数的作用是根据不同的命令,对控制循环的变量进行操作,从而操作进程循环。然后servicestatus.dwCurrentState = SERVICE_RUNNING;SetServiceStatus (hstatus, &servicestatus);向控制线程发送运行状态,接下来就是功能实现的循环了。

    另外需要注意的是,将程序加入服务,可以用cmd命令,或者批处理sc create scname binpath= D:\test.exe

    注意,等号后面必须有空格。sc start scname --启动服务

    转载于:https://www.cnblogs.com/yunbuyi/p/4906199.html

    展开全文
  • PAGE / NUMPAGES 用C语言编写Windows服务程序的五个步骤 Windows服务被设计用于需要在后台运行的 应用程序以及实现没有用户交互的任务为了学习这种控制台应用程序的基础知识 C(不是 C++)是最佳选择本文将建立并实现...
  • C语言编写Windows服务程序 原文: C语言编写Windows服务程序 #include <Windows.h> #include <stdio.h> #define SLEEP_TIME 5000 // 间隔时间 ...
  • 大家好啊,想了解一下谁在Windows平台上C编写过数据库,一直没能知道数据库如何编写;有哪位大佬能把编的代码给我看看嘛?谢谢!!!
  • 很多的初学者,学完了C语言,看完了《windows程序设计》还是不知道应该如何编写自己的程序,本例子由资深"hello word...用C语言编写window程序,这么简单啊。。。 本例子,只是抛砖引玉,供有一定基础的初学者参考。
  • 用C语言编写的计算器

    2009-07-21 23:38:00
    用C语言编写的计算器 可以进行高浮点数计算, 带有界面,windows程序设计
  • 这是用C语言编写windows界面的程序。C语言也能干大事。
  • C语言编写Windows服务进程[实例] #include <windows.h> SERVICE_STATUS ServiceStatus; SERVICE_STATUS_HANDLE hStatus; void WINAPI ControlHandler(DWORD request) { //响应服务控制台的消息 Service...
  • C写的Windows界面记事本程序源码,LCC集成编译环境编译通过。
  • windows下,visual studio2008开发 主要功能: 从ip.txt中读取ip地址,这个文件中只存放ip地址,每个地址单独一行。ip可能有几千个。 每个ip都是一台设备,要通过SSH2来连接每台设备并进行同样的操作,所以想建一个...
  • 满意答案a06638936813推荐于 2017.11.24我也是去年刚学完C语言的,这是一门非常基础的编程语言,有许多的程序员都在编写程序。至于你说的C++嘛,也是和C语言一样性质的编程语言。编程语言还有许多,诸如Basic,...
  • Eclipse在windows编写C语言的helloworld程序
  • 这里讲述了编写Windows服务程序的五大步骤,直接自己动手写
  • C语言编写简单病毒

    万次阅读 多人点赞 2017-10-09 11:34:17
    C语言编写简单病毒
  • 用c语言编写日历

    万次阅读 多人点赞 2018-03-24 22:01:21
    #include<windows.h> int isleap(int year) { if ((year % 4 == 0) && (year % 100 != 0) || (year % 400 == 0)) return 1; else return 0; } int max_day(int year, int month) { int day[12] = { 31, 28,...
  • C语言编写windows窗口程序

    千次阅读 2012-04-08 16:12:08
    很简单,只要有C语言的基础。经过简单的学习,就能投入windows的怀抱了!!!:) 第一步,建立一个win32工程: 我使用的是 Code::Blocks.首先要建立一个win32工程。Flie->New->Project 如下图: ...
  • 1、掌握在Ubuntu系统下用C语言编写一个程序,在Windows系统下的编译工具编译其中的主程序文件并运行 2、了解学习Makefile方式,并实现编程 开发环境 Ubuntu-16.04.6-desktop-i386 vc++6.0 一个简单的
  • 该文档按照人的思维习惯和模块化程序设计的思路,对C语言如何编写WINDOW服务程序做了深入探讨,并且贴出全部源代码。
  • C语言编写程序计时

    千次阅读 2017-12-03 20:16:16
    C语言编写程序计时
  • C语言很强大,其中可以通过GTK+的方式,实现用C语言编写的图形界面。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 82,271
精华内容 32,908
关键字:

windows是用c语言编写的吗

c语言 订阅