我有以下代码写入日志文件,它在我的控制台应用程序中正常工作:
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);
}
}
但是当我在我的电脑上将代码作为服务运行时,它会完全停止记录。我已经检查过,服务和我有相同的权利。
请注意:该服务不会崩溃,只是在没有记录的情况下运行。
答案 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
}