我构建了一个仅在不作为Windows服务运行时才有效的应用程序。嗯,服务运行,但它没有做它应该做的事情。该服务使用本地服务帐户。所以为了开始调试,我想我会从简单的事情开始:让它在启动时创建一个目录:
Directory.CreateDirectory(
Environment.SpecialFolder.LocalApplicationData + "\\MyService");
当我启动该服务时,它几乎立即停止,Windows报告了这一事实。当我注释掉上面的语句,重新编译并重新安装时,服务就会不停地运行。
显然上面的行引发了某种异常。我无法记录错误,因为我无法写入文件系统。任何想法为什么本地服务无法在其自己的%LOCALAPPDATA%?
中创建目录答案 0 :(得分:10)
你应该像这样使用GetFolderPath和LocalApplicationData:
string folderName = Path.Combine(Environment.GetFolderPath(
Environment.SpecialFolder.LocalApplicationData),
"MyService");
Directory.CreateDirectory(folderName)
答案 1 :(得分:4)
我认为这可能是因为没有特殊文件夹。作为本地服务帐户运行时,您在该用户下运行,而不是登录用户。所以你要求一个可能不存在的特殊文件夹,因为我不认为本地服务有个人资料。 (我可能错了) - 我错了:p
万一有人弹出:
C:\Windows\ServiceProfiles\LocalService
是本地服务配置文件文件夹,因此最终会在那里。
如果你想使用try catch调试它,请将该错误写入文件:
try
{
Directory.CreateDirectory(Environment.SpecialFolder.LocalApplicationData + "\\MyService");
}
catch (Exception ex)
{
System.IO.StreamWriter file = new System.IO.StreamWriter(@"C:\MyServicelog.txt",true);
file.WriteLine(ex.Message);
file.Close();
}
至少你可以看到导致错误的是什么
马丁
答案 2 :(得分:0)
我建议您将异常详细信息写入事件日志。所有用户帐户都有权写入事件日志,只要管理员已经创建了日志和源名称(您可以通过首先运行应用程序来完成)。
至于错误的根本原因,可能是因为LocalService通常不会获得默认创建的完整配置文件夹集。我不确定这是设计的,还是我在各种机器上观察到的。