繁体   English   中英

Python 程序在通过 Windows 服务运行时崩溃

[英]Python program crashes when run through a Windows service

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

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

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

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

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

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

我在这里完全没有想法。 我还应该搜索的任何方向?

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

如果它适用于您的测试应用程序,则听起来像是权限问题。 运行 windows 服务的安全上下文/用户是什么,该用户是否有权写入您期望的文件系统? 您是否尝试过使用 output 文件的完整路径来确定它的预期位置?

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

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

所有 windows 服务都从 System32 运行。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM