You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为pywin32创建的Windows服务设置工作目录

使用pywin32创建Windows服务时配置工作目录的方法

当然可以配置工作目录,有两种常用的实现方式,适配不同场景:

方法一:在服务代码中主动切换目录

在你的服务类的SvcDoRun方法开头,直接用Python的os.chdir()切换到目标工作目录,后续读取配置文件的操作就会基于这个路径执行。示例代码如下:

import win32serviceutil
import win32service
import win32event
import os

class MyService(win32serviceutil.ServiceFramework):
    _svc_name_ = "MyCustomService"
    _svc_display_name_ = "My Custom 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):
        # 切换到指定工作目录
        target_dir = "D:/MyService/ConfigFiles"
        if os.path.exists(target_dir):
            os.chdir(target_dir)
        # 后续读取配置文件的逻辑
        with open("config.ini", "r") as f:
            config = f.read()
        # 服务主逻辑...

if __name__ == '__main__':
    win32serviceutil.HandleCommandLine(MyService)

方法二:修改服务注册表项

Windows服务默认工作目录是C:\Windows\System32,你可以通过修改服务对应的注册表项指定自定义目录:

  • 打开注册表编辑器(输入regedit启动),定位到HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\[你的服务名]
  • 右键新建字符串值,命名为WorkingDirectory,值设为目标绝对路径(比如D:\MyService\ConfigFiles)
  • 重启服务后,新的工作目录即可生效

注意事项

  • 两种方法都建议使用绝对路径,避免因环境变量或默认路径变化导致文件找不到的问题
  • 用代码切换目录时,最好先判断目录是否存在,避免抛出异常导致服务启动失败
  • 修改注册表需要管理员权限,操作前建议备份相关项

内容的提问来源于stack exchange,提问作者Amit Rastogi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 10:12:03