當 temp/working0 目錄空間不足時,Service 停止時沒有日誌通知

请求类型: 错误 / 轻微
MCEBuddy 版本及位数(32 位或 64 位): 2.4.9 2018-03-09
操作系统及位数(32 位或 64 位): Win10x64
问题或建议摘要:
我在配置过程中不小心把“临时文件夹”设置弄丢了。
于是 MCEBuddy 恢复默认(临时文件夹留空)到 C:\Program Files\MCEBuddy2x\working0。
我的系统盘是块小 SSD,因此我会把所有能移走的数据都指向另一块更大的硬盘。
例如 F:\Recorded TV(我把 HDHomeRun 的录制目录指向这里,让它录到自己的 HDHomerun 文件夹,再由 MCEBuddy 监视并把转换后的文件移到同级目录)。

于是我把“临时文件夹”设为 F:\Recorded TV\MCEBuddyTemp,问题就解决了。
给其他读者:临时文件夹设置位于“设置 → 常规设置 → 系统设置”。

问题:当临时文件夹所在磁盘满了,服务就会崩溃,且 mcebuddy 日志里没有任何记录,只有 Windows 事件日志里有。由于它在开始处理第一个文件后一分钟内就崩溃,我只好先启动服务,然后立刻打开 GUI,等它连上新的服务实例后,用 GUI 上的 停止 按钮暂停,才能去改设置。

服务崩溃后,GUI 无法连到服务以获取状态,除了“关闭”按钮外,其余按钮全部灰掉,尤其是“设置”按钮,因此在这种状态下根本无法“修复”设置。我不知道在崩溃时锁定设置到底是好是坏(为了保留现场以便复现)。您看着办。但这确实给我抓“崩溃时机”带来了点小麻烦。

更麻烦的是,唯一的失败提示只在 Windows 事件日志里。建议捕获这个错误,优雅地关闭,并在 MCEBuddy(及转换)日志里写下合适的信息。另外,如果 GUI 连不上服务,不妨让“设置”按钮仍然可用,而不是直接关掉 GUI。

MCEBuddy 日志

INFORMATION> 2018-03-17T10:49:13 MCEBuddy.Engine.QueueManager --> Monitor task HD HomeRun : Added new job to queue for F:\Recorded TV\HDHomeRun\Show\Show S10E05 20170826 [20180310-1100].mpg
2018-03-17T10:49:13 MCEBuddy.Engine.ConversionJob --> Starting Conversion Thread
INFORMATION> 2018-03-17T10:49:13 MCEBuddy.Engine.Core --> Job for F:\Recorded TV\HDHomeRun\Show\Show S10E05 20170826 [20180310-1100].mpg started using Conversion Task Convert to MKV - TV and Profile MKV High Quality
2018-03-17T10:49:13 MCEBuddy.Engine.Core --> Temp working path is C:\Program Files\MCEBuddy2x\working0
2018-03-17T10:49:13 MCEBuddy.Engine.Core --> Starting new conversions, allowing system sleep
INFORMATION> --> Extracting metadata from file F:\Recorded TV\HDHomeRun\Show\Show S10E06 20170902 [20180310-1130].mpg
INFORMATION> 2018-03-17T10:49:13 MCEBuddy.Engine.ConversionJob --> Creating log file : C:\Program Files\MCEBuddy2x\log\Show S10E05 20170826 [20180310-1100].mpg-Convert to MKV - TV-2018-03-17T10-49-13.7124134-05-00.log  

日志的下一条记录就是我手动重启服务之后。

事件日志
[mike808: 服务启动后的最后一条事件日志]

Information	17-Mar-2018   2:49 AM
MCEBuddy service started on port 23332  

[mike808: 我认为这就是出问题的信号。]

Warning	17-Mar-2018   10:49 AM
MCEBuddy GUI: Unable to get Event Log Entries due to pipe error System.NullReferenceException: Object reference not set to an instance of an object.  

[mike808: 这里我从“服务”控制台手动重启了服务。]

Information	17-Mar-2018   3:50 AM
MCEBuddy service OnStart called, version 2.4.9.0

at MCEBuddy.GUI.StatusForm.displayEventLogEntries()

重现步骤:
用一个太大的文件去转换,而 TEMP/工作目录又太小。
这里有一段简短的排错视频

附上您的日志。

MCEBuddy 会执行空间检查(除非您在系统设置页面禁用了该选项),如果空间不足,它会在转换开始时失败,并在日志和转换历史页面中显示“空间不足”错误。

在我将 Windows 的 TEMP/TMP 文件夹移到数据盘,并把 MCEBuddy 的临时文件夹也设到数据盘之后,问题就没有再出现。
Windows 事件日志显示,当服务崩溃时,MCEBuddy GUI 与它用来与服务通信的命名管道断开了连接;也就是说,GUI 仍然持有一个文件句柄去与一个已不存在的进程通信,于是 GUI 看起来就“无响应”了。