簡體   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