服务无法写入文件

本文关键字:文件 服务 | 更新日期: 2023-09-27 18:14:56

我有以下代码写入日志文件,它在我的控制台应用程序中工作得很好:

try
{
    string log = "some message";
    string mFileName = "some directory to the log file";
    Console.WriteLine(log);
    using (StreamWriter w = File.AppendText(mFileName))
    {
         w.WriteLine(log);
         w.Dispose();
    }
}
catch (Exception e)
{
    Console.WriteLine("Error Log: " + e.Message);
}

但是当我把代码作为服务在我的PC上运行时,它完全停止了记录。我已经检查过了,服务和我有同样的权利。

请注意:服务不会崩溃,它只是运行不记录。

服务无法写入文件

这很可能与用户权限有关。我的猜测是,启动该服务的系统用户没有权限写入文件位置。

一种解决方案是使用您自己帐户的用户凭据启动服务(因为您有权限)

另一个解决方案是给用户(本地系统用户、服务用户或web服务的IIS用户)对目录的写访问权限,或者将文件的路径更改为用户具有写访问权限的目录。

如果你想确保,在using周围添加一个try catch块,并将异常写入控制台、调试或消息框。然后你就会知道哪里出了问题。

查看File可能出现的异常。MSDN上的AppendText

我猜它会抛出UnauthorizedAccessException

为什么不直接创建StreamWriter,将其封装在try-catch中,如果有异常,则使用System.Diagnostics.EventLog进行记录?

try 
{
    using (Streamwriter sw = new StreamWriter(path, true) 
    {
        sw.WriteLine(log);
    }
}
catch (Exception ex)
{
    // Log exception using System.Diagnostics.EventLog
}