簡體   English   中英

從任務調度程序C#調用時,StreamWriter不寫入文件

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM