服务不会写入文件

时间:2016-10-26 12:02:20

标签: c# service streamwriter

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

public class myObj : INotifyPropertyChanged
{

    public event PropertyChangedEventHandler PropertyChanged;
    public void propertyChanged(string s)
    {
        if(PropertyChanged != null)
        {
            PropertyChanged(this, new PropertyChangedEventArgs(s));
        }
    }


    string name;

    public string Name
    {
        get { return name; }
        set {
            name = value;
            propertyChanged("Name");
        }
    }
    int age;


    public myObj(string p1, int p2)
    {
        this.name = p1;
        this.age = p2;
    }

    public int Age
    {
        get { return age; }
        set { age = value;
        propertyChanged("Age");
        }
    }

    public override string ToString()
    {
        return String.Format("{0}, {1}", name, age);
    }
}

但是当我在我的电脑上将代码作为服务运行时,它会完全停止记录。我已经检查过,服务和我有相同的权利。

请注意:该服务不会崩溃,只是在没有记录的情况下运行。

2 个答案:

答案 0 :(得分:-1)

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

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

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

如果你想确定,在使用周围添加一个try catch块,并将异常写入console,debug或messagebox。那你就会知道出了什么问题。

see possible exceptions for File.AppendText on MSDN

我的猜测是它会引发 UnauthorizedAccessException

答案 1 :(得分:-1)

为什么不直接创建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
}