我一整天都在搞乱这一点,但仍未找到解决方案。我创建了一个Windows服务,应该记录到它的安装目录(Program Files/Service/LOGS/
)
但是当我运行我的服务时,它没有做我期望它做的事情,也没有记录任何事情。我有一段时间在没有任何记录的情况下弄清楚问题是什么。下面是我用于记录的类,任何人都可以看到我做错了什么?我甚至尝试在“LOGS”文件夹中给出“Everyone”所有权限,看看是否存在问题(但没有运气)。
public class Logging
{
public static void Log(string message)
{
string logFile = "LOGS/" + DateTime.Now.ToString("yyyyMMdd") + ".txt";
if (!Directory.Exists("LOGS"))
{
Directory.CreateDirectory("LOGS");
}
File.AppendAllText(logFile, message);
}
}
服务成功启动,Windows事件查看器中没有错误...
更新
我已将日志路径更改为以下内容,但仍然没有运气:
string logFile = @"F:\LOGS\" + DateTime.Now.ToString("yyyyMMdd") + ".txt";
答案 0 :(得分:4)
嗯,对于初学者,你不应该在Program Files目录中的任何文件夹中写任何东西。这很糟糕,在Vista,Windows 7或Windows Server 2008及更高版本上都会失败。
其次,您的代码实际上并没有指定您的想法。服务的“当前目录”不是它的程序文件目录。它可能类似于它运行的用户主目录,或Windows \ system32。同样,应用程序也不应该有写入持久性。相反,您应该登录到Program Data子目录。
答案 1 :(得分:1)
您是否尝试过调用Directory.GetCurrentDirectory并将当前目录的名称写入文件(使用绝对路径,并配置权限以使“Everyone”具有目标文件夹的“完全控制权”)。这样你就可以发现它是否正在写你认为应该写的地方。
同样重要的是:当您的服务正在运行时,它运行的是哪个帐户?如果用于运行服务的帐户没有在Program Files / Service / LOGS /上写入的权限,那么这可能是您没有看到任何内容写入的原因。
当然,您也可以使用写入事件日志,而不是写入文件系统(http://support.microsoft.com/kb/307024)。 IMO是推荐的做这种事情的方式。
答案 2 :(得分:1)
所以你现在写信给F:\ LOGS \,但是: