我有一个控制台应用程序,其目标版本是.Net Framework 3.5。当我尝试手动触发编译的exe时,程序执行并完美地完成其工作。但是在使用任务计划程序时,exe根本不会被触发。
任务计划程序中的错误详细信息如下:
最后运行结果0xE0434F4D
编辑:
事件日志如下,
Fault bucket , type 0
Event Name: CLR20r3
Response: Not available
Cab Id: 0
Problem signature:
P1: flvtomp4converter.exe
P2: 1.0.0.0
P3: 4ffa8abc
P4: mscorlib
P5: 2.0.0.0
P6: 4e1539fa
P7: 349e
P8: 119
P9: System.IO.DirectoryNotFound
P10:
这里发生了什么?
欢迎来到Windows 2008家族的精彩世界。这是关于您的应用程序计划在任务计划程序中运行的用户以及特定用户对您的应用程序处理所涉及的所有(!!!)文件夹具有哪些权限。此外,您必须确保此用户有权在安全设置中运行批处理。刚刚成为管理员组的成员已经不够了!
在我的情况下,这是因为我的控制台应用程序试图在log.txt
中创建一个C:\Windows\System32
文件,并且任务调度程序无权在该文件夹中创建新文件。
这是因为我没有指定绝对文件名放置日志文件的位置。
让我用我的代码示例解释一下:
我有一个程序在这个目录D:\somefolder\
和.exe
目录是D:\somefolder\program.exe
这是我的代码的快照(visual basic)
错了:
Dim logFileName As String = "log.txt"
/*
Create file based on logFileName directory
*/
.exe
- >它将创建一个目录为D:\somefolder\log.txt
的日志文件(没问题).exe
- >它将创建一个目录为C:\Windows\System32\log.txt
的日志文件(这将留下最后一次运行结果0xE0434F4D)正确:
Dim logFileName As String = AppDomain.CurrentDomain.BaseDirectory + "/log.txt"
/*
Create file based on logFileName directory
*/
.exe
- >它将创建一个目录为D:\somefolder\log.txt
的日志文件(没问题).exe
- >它将创建一个目录为D:\somefolder\log.txt
的日志文件(没问题)因此,您需要指定放置日志文件的绝对文件名。在我的例子中,我使用AppDomain.CurrentDomain.BaseDirectory