[英]StreamWriter not writing to file when called from task Scheduler C#
我有以下函數,它接受一個字符串,並將字符串內容記錄到日志文件中。
private static void LogEvent(string sEvent)
{
sEvent = DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss") + "|" + sEvent;
Console.WriteLine(sEvent);
try
{
using (StreamWriter oStreamWriter = new System.IO.StreamWriter("MyService_" + DateTime.Now.ToString("yyyyMMdd") + ".log", true))
{
oStreamWriter.WriteLine(sEvent);
}
}
catch
{
}
}
當從命令行手動運行調用該函數的程序或雙擊可執行文件時,將創建或附加日志文件。
我遇到的問題是我已經將程序設置為每10分鍾從任務調度程序調用一次,並且由於某種原因代碼正在正確執行,除了程序沒有創建或附加到日志文件。
計划任務使用與手動運行程序時相同的用戶權限來調用程序。
為什么會發生這種情況,我該如何解決它。
您當前正在嘗試寫入進程的當前工作目錄 - 當任務調度程序執行時,它可能類似於C:\\Windows\\System32
。 你無法在那里寫作。
指定絕對文件名,我想你會好的。 目前還不清楚地方, 你想寫,但你應該想想仔細-最好你應該從它生成的數據分開你的可執行文件。 考慮將Environment.GetFolderPath
與合適的SpecialFolder
成員(例如ApplicationData
)結合使用。
請注意,使用File.AppendAllText
會使代碼更簡單,請注意。
Jon Skeet的回答是正確的,問題在於工作目錄權限,你應該使用SpecialFolder來編寫日志,但我想再增加一個點,
從來沒有空catch
塊像你這樣catch { }
對於我這種catch
陳述某個隱藏那么多的未知問題。
我認為他們就像預告片那樣說,
catch
{
// WHO CARES
}
永遠不要在地毯下隱藏這種例外,采取一些行動或通知最終用戶或在某處發生了什么事。 這將有助於后期開發人員。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.