windows服务与自启动程序的区别

在客户端服务器项目实践中,作为服务端必须保持程序的24小时不间断运行,需要做一个监控,当监控到该程序已关闭时则重新启动下。

     有两种方法可以实现这个功能:

第一是做windows服务,作为后台的系统服务监控程序的运行状态。

第二是编写另外一个程序作为监控程序,通过添加计划任务,将监控程序设置为开机启动。

网上讨论两者的区别很少,大概都是集中在监控程序有界面而windows服务没有界面,其实监控程序也是可以写成没有界面显示,只是后台运行,即只能在任务管理器里面看到进程。     自己总结了下,注册一个服务,也是调用本地的一个exe来实现的,只不过该EXE入口函数包装了windows服务的一些参数,或者说服务就是将本地的exe包装了一下。在启动服务的时候,其实际使用的还是exe程序的。两者的主要区别:
一、启动时间与启动域不同,windows服务在用户未登陆(即计算机账号设置了密码,需要输入密码才进入系统)时已开始启动,而自启动程序启动时间为登陆后。同样的,程序作用范围为一个该帐户下运行,而服务是一个work station,你切换不同帐户该服务还是在运行中的。

三、windows服务可以设置运行时候参数,比如设置为无法关闭,而自启动程序在任务管理器中直接关闭是可以X掉的。


最后一点:
  一方面、自启动程序一般是GUI程序,能够跟桌面交互的。一个应用程序可以包括很多进程,不过一般应用程序也只是运行一个进程。可以设置自启动程序无界面,运行于后台,我感觉这样其实跟服务没有什么区别了。
    另外一方面、一个服务其实就是运行在后台的进程,与桌面无交互。服务只能有一个进程,在服务上启动其他程序在桌面上也是不会出现界面的,要出现界面,必须在设置服务时候选择与界面交互(这个时候服务启动的其他程序出现界面了,该服务依然是没有界面)。

    说了这么多,其实制作windows服务监控与直接编程另外一个程序作为自启动程序来监控其实没有差别。

   补充:如果windows服务程序或者自启动程序因为异常自身退出了,这个时候两者表现有差别。windows服务程序可以通过设置异常后自动重启来保持一直监控,而自启动程序只能通过计划任务,重启或者编写另外的程序来启动了。


  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是 Windows 自动启动程序代码的示例: 1. 在注册表中添加启动项 在注册表中添加启动项是一种常见的方法,可以让程序Windows 启动自动运行。以下是一个示例代码: ```c #include <Windows.h> int main() { HKEY hKey; DWORD dwDisposition; // 打开注册表项 RegCreateKeyEx(HKEY_CURRENT_USER, "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", , NULL, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &hKey, &dwDisposition); // 设置键值 RegSetValueEx(hKey, "MyProgram", , REG_SZ, (BYTE*)"C:\\MyProgram.exe", strlen("C:\\MyProgram.exe")); // 关闭注册表项 RegCloseKey(hKey); return ; } ``` 2. 在启动文件夹中添加快捷方式 另一种常见的方法是在启动文件夹中添加快捷方式,以下是一个示例代码: ```c #include <Windows.h> #include <ShlObj.h> int main() { TCHAR szPath[MAX_PATH]; // 获取启动文件夹路径 if (SUCCEEDED(SHGetFolderPath(NULL, CSIDL_STARTUP, NULL, , szPath))) { // 创建快捷方式 TCHAR szShortcutPath[MAX_PATH]; PathCombine(szShortcutPath, szPath, "MyProgram.lnk"); CoInitialize(NULL); IShellLink* pShellLink; HRESULT hr = CoCreateInstance(CLSID_ShellLink, NULL, CLSCTX_INPROC_SERVER, IID_IShellLink, (LPVOID*)&pShellLink); if (SUCCEEDED(hr)) { pShellLink->SetPath("C:\\MyProgram.exe"); IPersistFile* pPersistFile; hr = pShellLink->QueryInterface(IID_IPersistFile, (LPVOID*)&pPersistFile); if (SUCCEEDED(hr)) { pPersistFile->Save(szShortcutPath, TRUE); pPersistFile->Release(); } pShellLink->Release(); } CoUninitialize(); } return ; } ``` 希望这些代码能够帮助你实现 Windows 自动启动程序的功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值