因工作的需要,我要先做一个Windows服务的Demo,可在用InstallUtil安装Windows服务时出现了FileNotFound的异常,估计是我的服务程序需要用到一个叫quotes.txt的文件,可我已把这个文件放到了服务程序集里的bin目录下的debug目录下了,而且我尝试在程序里写死文件路径也报这个错误。
另外,我在InstallUtil命令里加了/LogFile=test.installlog也没见生成这个文件,迫于无奈,才发帖出来请大家帮忙解决问题。
这里是源代码,QuoteService是服务程序集。
谢谢大家帮我解决下
Windows服务进程的默认运行路径是:C:\windows\system\ 下,所以如果你用相对路径引用 quotes.txt 文件,实际上,程序会使用此路径: C:\windows\system\quotes.txt 。
解决办法,一是用绝对路径,当然,这样的话,不利于部署(比如某台机器上根本没有d盘)。
另一种方式,则是在使用文件路径时,始终用程序集基址,如下:
string logfile = "";
if(!Path.IsPathRooted(logfile)) // 判断给定路径是否为相对地址,并不准确,可以使用正则表达式解决。
{
logfile = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, logfile);
}