【问题标题】:Python program crashes when run through a Windows servicePython 程序在通过 Windows 服务运行时崩溃
【发布时间】:2020-04-27 17:32:57
【问题描述】:

我的客户为我提供了一个 Python 控制台应用程序,该应用程序执行一些工作并将结果写入 .txt 文件。我的任务是编写一个 Windows 服务来读取特定的 .txt 文件并执行进一步的操作。

我在 .NET 上使用 C# 来编写服务。我的解决方案包含 3 个项目:

  • 逻辑层项目。
  • Windows 服务层项目。
  • 一个测试应用层项目,用于调试和其他目的。

Windows 服务层和测试应用层都将逻辑层用于核心功能。当我通过测试层运行应用程序时,一切正常,但每当我尝试通过服务运行应用程序时,服务启动的 Python 独立应用程序不会写入任何输出文件。我可以看到 Python 应用程序在任务管理器中运行,但是任何地方都没有输出。我相信 Python 代码崩溃了,但我无法得到确切的原因。

我尝试了以下方法来调试问题:

  • WindowsSystem32 目录中搜索任何相关的输出文件,只是为了考虑服务将这些目录作为默认工作目录的可能性。
  • 在服务代码中使用绝对路径来确保 Python 部分不会将输出文件写入某个未知位置。
  • 让客户端实现通过命令行参数将输出目录传递给 Python 代码。
  • 用 C# 编写了一个模拟控制台应用程序,它写入一个文件,尝试通过服务调用它,但它工作正常并按预期写入文件。
  • 怀疑标准 IO 可能会导致 Python 应用程序崩溃,因此在我的模拟程序中使用了标准 IO,但它可以正常工作。
  • 尝试给 Python 代码一个很长的任务,这应该需要大约 30 分钟才能完全执行,但 Python 脚本立即运行并关闭,这基本上是它在某个时候崩溃的理论的可靠证明。
  • 尝试使用我未提升权限的 Windows 用户而不是 本地系统 伪用户运行该服务。
  • 已尝试将服务配置为能够与桌面交互。

我在这里完全没有想法。我还应该搜索什么方向?

请注意,如果这很重要:我正在使用 System.Diagnostics.Process 来启动 Python 脚本。

【问题讨论】:

    标签: python c# .net windows-services


    【解决方案1】:

    如果它可以在您的测试应用中运行,这听起来像是权限问题。运行 Windows 服务的安全上下文/用户是什么,该用户是否有权写入您期望的文件系统?您是否尝试过使用输出文件的完整路径来确定它的预期位置?

    我倾向于编写一个小型 python 应用程序,它只是将“hello world”保存到一个文件中,然后通过 Windows 服务使其工作,然后从那里构建。

    【讨论】:

    • 嗨 timhowarduk,感谢您的回复。如前所述,我尝试将我的 Windows 服务作为本地系统和我的实际 Windows 用户运行,但两者都不起作用。我也很确定 Windows 服务可以访问我要写入的目录,因为服务本身可以写入该目录,它只是似乎崩溃的 python 应用程序。我也尝试过使用完整的绝对路径。但实际上,您建议编写一个 python 应用程序来测试这一点似乎是唯一的方法。谢谢你,我会试一试,然后告诉你。
    • 我不能评论你上面的回答,没有足够的代表。我的建议是让 python 开发人员添加一个可选参数以允许指定配置文件的路径。那时它会更加通用。 (如果我有任何帮助,也许可以投票支持我的答案,我正在努力达到 50 个代表,以便我可以对答案发表评论!)
    • 嘿蒂姆,谢谢你的帮助。是的,我也是这么想的,我已经要求开发人员添加那个特定的参数。希望届时所有的问题都能得到解决。关于投票,我确实在您发表评论后立即为您的答案投票,但由于我也没有足够的代表,因此我的投票不公开。
    【解决方案2】:

    感谢 timhowarduk 的帮助,我终于能够找到问题的根本原因。 python script 正在寻找一个配置文件,当它从 Windows 服务运行时,它正在 System32 中寻找该配置文件。

    所有的 windows 服务都是从 System32 运行的。

    上述情况导致 python 脚本在 System32 中搜索,因为它作为 Windows 服务的一部分运行。我想我可能只是要求客户端编辑 python 脚本以从 Windows 服务应用程序目录中读取配置。

    【讨论】:

      猜你喜欢
      • 2020-11-19
      • 1970-01-01
      • 1970-01-01
      • 2011-06-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-08
      • 2015-08-10
      相关资源
      最近更新 更多