Python实现Windows服务自启动、禁用、启动、停止、删除

本文介绍了如何使用Python的win32service模块在Windows系统中操作服务,包括启用、启动、停止、禁用和移除PostgreSQL_65432服务的示例代码。
部署运行你感兴趣的模型镜像

如果一个程序被服务监管,那么仅仅kill程序是无用的,还要把服务关掉

设置自启动

import win32service
import win32serviceutil


def EnableService(service_name):
    try:
        # 获取服务管理器
        scm = win32service.OpenSCManager(None, None, win32service.SC_MANAGER_ALL_ACCESS)

        # 获取服务的句柄
        service = win32service.OpenService(scm, service_name, win32service.SERVICE_ALL_ACCESS)

        # 自启动服务
        win32service.ChangeServiceConfig(service, win32service.SERVICE_NO_CHANGE, win32service.SERVICE_AUTO_START, win32service.SERVICE_NO_CHANGE, None, None, 0, None, None, None, None)

        print(f"{service_name} service  enabled successfully.")
    except Exception as e:
        print(f"Failed to enable {service_name} service. Error: {e}")
    finally:
        # 关闭服务句柄
        win32service.CloseServiceHandle(service)
        # 关闭服务管理器句柄
        win32service.CloseServiceHandle(scm)

启动服务

def StartService(service_name):
    try:
        win32serviceutil.StartService(service_name)
        print(f"{service_name} service started successfully.")
    except Exception as e:
        print(f"Failed to start {service_name} service. Error: {e}")

停止服务

def StopService(service_name):
    try:
        # 获取服务管理器
        scm = win32service.OpenSCManager(None, None, win32service.SC_MANAGER_ALL_ACCESS)

        # 获取服务的句柄
        service = win32service.OpenService(scm, service_name, win32service.SERVICE_ALL_ACCESS)

        # 停止服务
        win32service.ControlService(service, win32service.SERVICE_CONTROL_STOP)

        print(f"{service_name} service  stopped successfully.")
    except Exception as e:
        print(f"Failed to stop {service_name} service. Error: {e}")
    finally:
        # 关闭服务句柄
        win32service.CloseServiceHandle(service)
        # 关闭服务管理器句柄
        win32service.CloseServiceHandle(scm)

禁用服务

def DisableService(service_name):
    try:
        # 获取服务管理器
        scm = win32service.OpenSCManager(None, None, win32service.SC_MANAGER_ALL_ACCESS)

        # 获取服务的句柄
        service = win32service.OpenService(scm, service_name, win32service.SERVICE_ALL_ACCESS)

        # 禁用服务

        win32service.ChangeServiceConfig(service, win32service.SERVICE_NO_CHANGE, win32service.SERVICE_DISABLED, win32service.SERVICE_NO_CHANGE, None, None, 0, None, None, None, None)

        print(f"{service_name} service  Disabled successfully.")
    except Exception as e:
        print(f"Failed to disable {service_name} service. Error: {e}")
    finally:
        # 关闭服务句柄
        win32service.CloseServiceHandle(service)
        # 关闭服务管理器句柄
        win32service.CloseServiceHandle(scm)
def Remove_Service(service_name):
    try:
        win32serviceutil.RemoveService(service_name)
        print(f"Service '{service_name}' removed successfully.")
    except Exception as e:
        print(f"Failed to remove service '{service_name}'. Error: {e}")

移除服务

import win32serviceutil

def RemoveService(service_name):
	try:
	    win32serviceutil.RemoveService(service_name)
	    print(f"Service '{service_name}' removed successfully.")
	except Exception as e:
	    print(f"Failed to remove service '{service_name}'. Error: {e}")

service_name = 'PostgreSQL_65432'
# EnableService(service_name)
StartService(service_name)
#StopService(service_name)
#DisableService(service_name)
#Remove_Service(service_name)

您可能感兴趣的与本文相关的镜像

Python3.10

Python3.10

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

### Windows Print Spooler 服务错误1067的解决方案 错误代码1067通常表示Print Spooler服务意外终止,这可能是由于服务配置问题、依赖的服务未正常运行或系统文件损坏等原因引起的。以下是解决该问题的具体方法: #### 方法一:检查并修复依赖服务 Print Spooler服务依赖于其他关键服务(如Remote Procedure Call (RPC) 和 Windows Event Log)。如果这些服务启动或被禁用,可能会导致Print Spooler无法正常运行。 - 确保Remote Procedure Call (RPC)服务已启用并设置为自动启动[^3]。 - 检查Windows Event Log服务是否已启动并设置为自动启动。如果没有启动,请手动启动它。 #### 方法二:修复系统文件 错误1067可能由系统文件损坏引起。可以通过以下命令修复系统文件: ```cmd sfc /scannow ``` 此命令会扫描系统文件并修复可能存在的损坏文件[^1]。 #### 方法三:重新配置Print Spooler服务依赖项 有时Print Spooler服务的依赖项配置不正确,可以通过以下步骤重新配置: 1. 打开注册表编辑器,导航到路径: ``` HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Spooler ``` 2. 找到`DependOnService`键值,并确保其值仅包含`RPCSS`[^3]。 3. 在运行窗口中输入以下命令以重新配置服务依赖项: ```cmd sc config spooler depend= rpcss ``` #### 方法四:清除打印队列 打印队列中的损坏文件可能导致Print Spooler服务崩溃。可以按照以下步骤清除打印队列: 1. 停止Print Spooler服务: ```cmd net stop spooler ``` 2. 删除打印队列文件夹中的所有内容: ```cmd del /f /q %systemroot%\system32\spool\printers\* ``` 3. 启动Print Spooler服务: ```cmd net start spooler ``` #### 方法五:检查病毒或恶意软件 某些病毒或恶意软件可能会破坏Print Spooler服务。建议使用可靠的杀毒软件进行全面扫描[^4]。 #### 方法六:重置Print Spooler服务 如果上述方法无效,可以尝试重置Print Spooler服务: 1. 停止Print Spooler服务: ```cmd net stop spooler ``` 2. 删除打印驱动程序缓存文件夹中的内容: ```cmd del /f /q %systemroot%\system32\driverstore\filecache\* ``` 3. 重新启动Print Spooler服务: ```cmd net start spooler ``` ### 注意事项 - 如果问题仍然存在,可能需要考虑系统更新或重新安装相关驱动程序。 - 确保操作系统为最新版本,因为微软可能已经修复了与Print Spooler相关的已知问题。 ```python # 示例代码:通过Python脚本检查Print Spooler服务状态 import subprocess def check_spooler_status(): try: result = subprocess.run(['sc', 'query', 'spooler'], capture_output=True, text=True) if "RUNNING" in result.stdout: print("Print Spooler服务正在运行") else: print("Print Spooler服务未运行") except Exception as e: print(f"发生错误: {e}") check_spooler_status() ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值