首页 > 解决方案 > 在启动时从 powershell 脚本作为 Windows 服务运行 python 代码

问题描述

我想在每次计算机启动时运行一个 python 脚本,而不必登录。

为此,我尝试创建一个 Windows 服务,该服务将首先运行一个 powershell 脚本(进行一些基本的检查配置),然后运行一个简单的 python 命令行,如下所示:

python ./app.py

但就像我说的,我希望这个脚本在启动时运行,为此我创建了一个 Windows 服务。问题是即使 powershell 脚本运行,python 命令(并且只有这个命令)也不起作用

一些有用的信息

如果我从终端启动 powershell 脚本:它可以工作。

如果我直接从终端启动 python 脚本:它可以工作。

如果我将 python 脚本作为后台进程启动pythonw它可以工作。

我知道 powershell 脚本在启动时运行,因为我要求他创建文件夹(作为测试)以向我展示它的工作原理。

python 程序使用多线程和网络连接。我不知道这是否相关,但这只是说它是一个非常大的程序,不需要任何人工交互并且可以自行运行。也许 Windows 阻止了这方面的事情?

其他信息:powershell 脚本(以及 python 脚本)都需要以管理员身份运行。我知道它已经这样做了,因为在以下条件下它会创建一个文件夹。

if (([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)) {
    mkdir C:\Users\Desktop\Test2
}

我试过的

我首先在C#中创建了一个 Windows 服务,它使用以下基本代码以完全权限运行:

var ps1File = @"C:\\path\\to\\powershell\\script\\start.ps1";

            var startInfo = new ProcessStartInfo()
            {
                FileName = "powershell.exe",
                Arguments = $"-NoProfile -NoExit -ExecutionPolicy unrestricted -file \"{ps1File}\"",
                UseShellExecute = true
            };
            Process.Start(startInfo);

该服务似乎确实像我说的那样工作,它确实是 python 命令不会。

我还尝试使用NSSMAlwaysUp创建服务,但没有任何效果。

标签: pythonwindowspowershellservice

解决方案


推荐阅读