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

问题描述 投票:0回答:2

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

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

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

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

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

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

我在这里全都没主意。我也应该搜索任何方向吗?

仅需注意,如果重要的话:我正在使用System.Diagnostics.Process启动Python脚本。

python c# .net windows-services
2个回答
0
投票

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

我倾向于编写一个小的python应用程序,该应用程序仅将“ hello world”保存到文件中,并从Windows服务中使之工作,然后从那里开始构建。


0
投票

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

所有Windows服务都从System32运行。

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

© www.soinside.com 2019 - 2024. All rights reserved.