写一个Windows服务

 

 

  做了两个和Windows服务有关的项目了,最开始的时候没做过,不懂,现在明白了许多。需要注意的是,如果不想登录什么的,最后在添加安装程序的那里选择那个字长的右键属性,把启动方式改为local system

 

一、新建Windows服务

新建完毕之后,是这样的,双击Service1然后在中间单击右键,添加安装程序,会出来一个ProjectInstaller。

 

 二、开始写代码吧

 双击Service1之后在中间单击右键查看代码,现在来写代码,格式如下:

  public partial class Service1 : ServiceBase
    {
        Timer time = new Timer();

        public Service1()
        {
            InitializeComponent();
            time.Interval = 60000;
            time.AutoReset = true;
            time.Elapsed += new ElapsedEventHandler(JJ);
            //JJ(null,null);  调试吧
        }


        public void JJ(object sender, System.Timers.ElapsedEventArgs e)
        { 
            //搞事吧
        //搞事之前先写一个计时器停止工作,否则运行着方法计时器还在工作会又启动一个方法,如此循环
        myTimer.Enabled = false;

//开始搞事ing........

        
       //搞完事之后开启我们的计时器
      myTimer.Enabled = true;
} protected override void OnStart(string[] args) { time.Enabled = true; } protected override void OnStop() { time.Enabled = false; } }

 

转载于:https://www.cnblogs.com/yunquan/p/7651093.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 可以使用 Python 模块 `win32service` 和 `win32serviceutil` 来一个 Windows 服务,实现持续检测 `a.exe` 程序是否启动。 下面是一个简单的示例代码: ``` import win32service import win32serviceutil import win32event import win32process import time class MyService(win32serviceutil.ServiceFramework): _svc_name_ = "MyService" _svc_display_name_ = "My Service" def __init__(self, args): win32serviceutil.ServiceFramework.__init__(self, args) self.hWaitStop = win32event.CreateEvent(None, 0, 0, None) def SvcStop(self): self.ReportServiceStatus(win32service.SERVICE_STOP_PENDING) win32event.SetEvent(self.hWaitStop) def SvcDoRun(self): while True: # 检测 a.exe 程序是否启动 try: pid = win32process.FindProcessesByName("a.exe")[0] print("a.exe 已启动") except: print("a.exe 没有启动") # 每隔 5 秒检测一次 time.sleep(5) if __name__ == '__main__': win32serviceutil.HandleCommandLine(MyService) ``` 使用 `python your_script.py install` 安装服务,使用 `python your_script.py start` 启动服务,使用 `python your_script.py stop` 停止服务。 该示例代码会每隔 5 秒检测一次 `a.exe` 程序是否启动,如果启动了,会打印 "a.exe 已启动",如果没有启动,会打印 "a.exe 没有启动"。 ### 回答2: 要使用Python一个Windows服务来实现持续检测a.exe程序有没有启动,我们可以使用`pywin32`库来操作Windows API。下面是一个简单示例: ```python import win32serviceutil import win32service import win32event import servicemanager import socket import os # 服务名称 service_name = 'AService' class AService(win32serviceutil.ServiceFramework): _svc_name_ = service_name _svc_display_name_ = service_name def __init__(self, args): win32serviceutil.ServiceFramework.__init__(self, args) self.is_running = False def SvcStop(self): self.ReportServiceStatus(win32service.SERVICE_STOP_PENDING) self.is_running = False def SvcDoRun(self): servicemanager.LogMsg(servicemanager.EVENTLOG_INFORMATION_TYPE, servicemanager.PYS_SERVICE_STARTED, (self._svc_name_, '')) self.is_running = True while self.is_running: # 检测a.exe是否正在运行 if not self.is_a_running(): # 当a.exe没有运行时,在这里执行相应的操作,比如重启a.exe self.start_a() # 检测间隔为5秒 win32event.WaitForSingleObject(self.hWaitStop, 5000) servicemanager.LogMsg(servicemanager.EVENTLOG_INFORMATION_TYPE, servicemanager.PYS_SERVICE_STOPPED, (self._svc_name_, '')) def is_a_running(self): # 获取当前系统中运行的进程列表 pids = os.popen('tasklist /FI "IMAGENAME eq a.exe" /NH').read() return "a.exe" in pids def start_a(self): # 启动a.exe os.startfile('a.exe') if __name__ == '__main__': win32serviceutil.HandleCommandLine(AService) ``` 上述代码创建了一个名为`AService`的Windows服务类,实现持续检测`a.exe`程序有没有启动的功能。在`SvcDoRun`方法中,使用`is_a_running`方法检测`a.exe`进程是否正在运行,如果不在运行则启动`a.exe`。这里以重启`a.exe`为例,你可以根据实际需求,在相应处执行适当的操作。 你可以使用`pyinstaller`将上述代码打包成可执行的`.exe`文件,并使用`sc create`命令将其安装为Windows服务,然后使用`net start`命令启动该服务。 ### 回答3: 要使用Python编一个Windows服务来实现持续检测a.exe程序是否启动,可以使用win32service和win32serviceutil模块来实现。 首先,需要安装pywin32库,可以使用以下命令来安装: ``` pip install pypiwin32 ``` 然后,创建一个名为"service.py"的Python脚本,代码如下: ```python import win32serviceutil import win32service import win32event import servicemanager import socket import subprocess class MyService(win32serviceutil.ServiceFramework): _svc_name_ = 'MyService' _svc_display_name_ = 'My Service' def __init__(self, args): win32serviceutil.ServiceFramework.__init__(self, args) self.hWaitStop = win32event.CreateEvent(None, 0, 0, None) socket.setdefaulttimeout(60) def SvcStop(self): self.ReportServiceStatus(win32service.SERVICE_STOP_PENDING) win32event.SetEvent(self.hWaitStop) def SvcDoRun(self): servicemanager.LogMsg(servicemanager.EVENTLOG_INFORMATION_TYPE, servicemanager.PYS_SERVICE_STARTED, (self._svc_name_, '')) self.main() def main(self): while True: try: subprocess.check_output(['tasklist', '/FI', 'IMAGENAME eq a.exe']) except subprocess.CalledProcessError as e: # a.exe is not running pass else: # a.exe is running pass # Wait for 5 seconds before checking again win32event.WaitForSingleObject(self.hWaitStop, 5000) if __name__ == '__main__': win32serviceutil.HandleCommandLine(MyService) ``` 此代码定义了一个名为"MyService"的Windows服务类,它继承自win32serviceutil.ServiceFramework。你可以根据实际需要更改服务名称和显示名称。 在主循环(main())中,使用subprocess模块调用tasklist命令来检测a.exe程序是否正在运行。如果找不到a.exe进程,则说明a.exe没有启动。 最后,在命令提示符中以管理员身份运行以下命令来安装该服务: ``` python service.py install ``` 然后,可以使用以下命令来启动该服务: ``` python service.py start ``` 这个服务将在后台持续检测a.exe程序有没有启动。如果要停止服务,可以使用以下命令: ``` python service.py stop ``` 希望对你有所帮助!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值