【问题标题】:How to launch a python process in Windows SYSTEM account如何在 Windows SYSTEM 帐户中启动 python 进程
【发布时间】:2014-10-06 10:25:12
【问题描述】:

我正在用 python 编写一个测试应用程序并测试一些特定的场景,我需要在 windows SYSTEM 帐户中启动我的 python 子进程。 我可以通过从我的 python 脚本创建 exe 来做到这一点,然后在创建 Windows 服务时使用它。但是这个选项对我不利,因为将来如果我在我的 python 脚本中更改任何内容,那么我必须每次都重新生成 exe。

如果有人对如何执行此操作有更好的想法,请告诉我。

比什努

【问题讨论】:

  • 使用psexec,可从 Microsoft 网站获得。

标签: python windows


【解决方案1】:
  1. 创建一个永久运行的服务。
  2. 为服务安排一个 IPC 通信通道。
  3. 从您的桌面 python 代码,通过该 IPC 通道向服务发送消息。这些消息指定服务要采取的操作。
  4. 服务接收消息并执行操作。即执行发送者请求的python代码。

这允许您将服务与其执行的 python 代码分离,从而避免重复重新安装服务。

如果您不想在服务中运行,则可以使用CreateProcessAsUser 或类似的 API。

【讨论】:

  • 感谢您的回复。
  • 感谢您的回复。但我的要求是在每次测试运行时重新启动进程,因为我需要获取进程 ID 并使用该进程 ID 来决定是否要在运行时监视该进程。由于这个测试套件将通过我们的自动化运行,我无法在我的测试机器上运行一项专门的服务。另一个原因是我编写了在本地用户上下文中启动的 Python 脚本,我想使用相同的 Python 脚本在 SYSTEM 模式下启动,以便在两个上下文中执行相同的代码。
  • 我根据问题中的内容进行了回答。在任何情况下,您一直在运行的服务都可以启动进程。所以我描述的将解决你的问题。
  • @Bishnu:根据您的描述,听起来您仍然可以运行一个专用的 SYSTEM 服务;您仍将为每个测试运行一次 Python 脚本,并且进程 ID 和任何其他相关信息都可以成为它通过 IPC 发送到服务的信息的一部分。在几乎所有情况下,这确实是最安全和最简单的方法。
【解决方案2】:

你也可以使用 Windows 任务计划程序,它可以在 SYSTEM 帐户下运行脚本,而且它的界面很简单(如果你不经常测试:-))

【讨论】:

    【解决方案3】:

    要以系统帐户权限运行文件,您可以使用psexec。下载这个: Sysinternals

    那么你可以使用:

    os.system 
    

    subprocess.call
    

    并执行:

    PSEXEC -i -s -d CMD "path\to\yourfile"
    

    【讨论】:

      【解决方案4】:

      刚刚遇到这个 - 我知道,有点晚了,但无论如何。我遇到了类似的情况,我用 NSSM (Non_Sucking Service Manager) 解决了它。基本上,该程序使您能够将任何可执行文件作为服务启动,这是我对 Python 可执行文件所做的,并将我正在测试的 Python 脚本作为参数提供给它。

      所以我可以运行服务并根据需要编辑脚本。当我对脚本进行任何更改时,我只需要重新启动服务。

      生产环境的要点:尽量不要依赖第三方软件,如 NSSM。您也可以使用标准的 SC 命令 (see this answer) 或 PowerShell (see this MS doc) 来实现此目的。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-11-27
        • 2012-02-27
        • 2012-10-02
        • 2011-11-11
        • 2011-03-27
        • 2011-10-04
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多