【点滴积累,厚积薄发】windows schedule task中.exe程序的路径问题等问题总结
1.在发布ReportMgmt的Job时遇到一个路径问题,代码如下:
doc.Load(@"Configuration\Business\business.config");
这种写法是相对路径,由于不同的帐户在运行.exe程序时,其工作目录(Working Directory)各不相同,cmd所在路径是c:\Windows\System32\,因此它默认去这里找文件“c:\Windows\System32\Configuration\Business\business.config”,所以是错误的。
正确的写法是:
var bizConfigPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, @"Configuration\Business\business.config");
doc.Load(bizConfigPath);
![](https://images2015.cnblogs.com/blog/26252/201601/26252-20160114132350382-867460022.png)
2.我们的控制台程序,没有使用Console.ReadKey或Console.ReadLine阻塞,所以在发起异步写日志服务调用后,有可能就被结束了(因为Logger.LogAsync内部用了新的线程(TaskFactory),线程的从创建到运行还是有一定调度成本的,所以可能进程被关闭时,线程还没来得及被调用),导致写日志服务没有成功被调用。
一种有效的写法是在调用时加Wait,等待它执行完成。
catch (Exception err)
{
Logger.LogAsync(new LogEntrySetting()
{
CategoryName = "Job-CMS"
, SubCategoryName = "Report"
, Content = err.ToString()
, LogUserName = "DeilyDetailJob"
}).Wait();
}
{
Logger.LogAsync(new LogEntrySetting()
{
CategoryName = "Job-CMS"
, SubCategoryName = "Report"
, Content = err.ToString()
, LogUserName = "DeilyDetailJob"
}).Wait();
}
——致力于微软企业解决方案、项目管理及技术培训
posted on 2016-01-14 13:30 James.H.Fu 阅读(1044) 评论(0) 编辑 收藏 举报