【点滴积累,厚积薄发】windows schedule task中.exe程序的路径问题等问题总结
2016-01-14 13:30
507 查看
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);
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();
}
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);
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();
}
相关文章推荐
- tar linux 命令说明
- C语言-关于输入缓冲区
- Android中的时间自动更新
- 考察自己this指向
- Win10 UWP 开发系列:使用SplitView实现汉堡菜单及页面内导航
- 【arXiv】2015 深度学习年度十大论文
- apktool反编译apk
- vSphere中虚拟机的屏幕分辨率修改
- linux命令之md5sum详解
- [leetcode] 99. Recover Binary Search Tree 解题报告
- JVM内存机制详解
- 修正模糊处理显示效果问题
- 在UIAcitionSheet中添加UIPickerView
- Git学习札记
- ISO7816协议中几个时间限制
- PHP文件管理器
- python 验证码
- sysbench安装出错(不安装mysq)的解决办法
- hibernate异常处理积累
- Java线程安全