以系统身份从任务调度器运行Python文件

1 投票
2 回答
46 浏览
提问于 2025-04-14 18:27

我写了一个Python脚本,用来监控MS Edge的当前版本。当我手动运行这个脚本时,它会创建一个叫做previous_version.txt的文本文件,并把版本号写进去。这一切都很顺利。

现在我想把这个脚本添加到任务调度器中,让它作为系统任务在我没有登录的时候运行(其实是希望它能在远程服务器上运行)。可是,这个方法不奏效。

任务调度器显示任务已经成功完成,但返回的代码是2147942401,而且从来没有创建出那个.txt文件。

请看下面附上的图片。

这里是图片描述

这里是图片描述

我的Python脚本:

import os
import win32api

def local_has_changed():
    filepath = r"C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe"
    info = win32api.GetFileVersionInfo(filepath, "\\")
    ms = info["FileVersionMS"]
    new_majorversion = str(win32api.HIWORD(ms))

    path = os.path.dirname(__file__)
    file = str(path)+"\\previous_version.txt"

    if not os.path.exists(file):
        open(file, 'w+').close()
        
    filehandle = open(file, 'r')
    old_majorversion = str(filehandle.read())
    filehandle.close()
    
    if new_majorversion != old_majorversion:
        print('Version changed from '+old_majorversion+' to '+new_majorversion)

    filehandle = open(file, 'w')
    filehandle.write(str(new_majorversion))
    filehandle.close()

local_has_changed()

这个文件在远程服务器和我本地电脑上手动运行都没问题,但在任务调度器中运行就失败了。我现在使用的是Windows 11。

2 个回答

0

你看到的返回值对应的是系统错误代码80070001。这个错误的描述是:

Severity: 2 - Warning
Facility: 7 - FACILITY_WIN32
Error: 0001 - Incorrect function.

不过,这里并不清楚具体是哪个函数出了问题。可能是因为在SYSTEM账户下运行这段代码,导致无法访问某些功能或文件。你需要添加一些调试代码来帮助找出问题所在。同时,也要检查一下脚本的位置以及它引用的任何文件,确保这些都在系统可以访问的目录里。

0

我终于搞明白了。

虽然在提升权限的命令提示符中,pip列表里显示有pywin32,但系统其实并没有权限使用pywin32。

解决办法就是在提升权限的命令提示符中重新安装pywin32,现在一切都正常运作了!

撰写回答