0

我有一个控制台应用程序,其目标版本是 .Net Framework 3.5。当我尝试手动触发编译的 exe 时,程序执行并完美地完成了它的工作。但是当使用任务计划程序时,exe 根本不会被触发。

Task Sceduler 中的错误详情如下:

上次运行结果 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: 

这里发生了什么?

4

2 回答 2

2

欢迎来到 Windows 2008 家族的精彩世界。这是关于您的应用程序计划在任务计划程序中运行的用户以及特定用户对您的应用程序处理所涉及的所有(!!!)文件夹的权限。此外,您必须确保该用户授权在安全设置中运行批处理。仅仅成为管理员组的成员已经不够了!

于 2013-06-10T20:12:55.747 回答
0

就我而言,这是因为我的控制台应用程序试图在其中创建一个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通过 Windows 资源管理器执行 -> 它将创建一个带有目录的日志文件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通过 Windows 资源管理器执行 -> 它将创建一个带有目录的日志文件D:\somefolder\log.txt (没问题)

  • 如果我.exe通过任务调度程序执行 - >它将创建一个带有目录的日志文件D:\somefolder\log.txt (没问题)

因此,您需要指定一个绝对文件名来放置日志文件。在我的示例中,我使用AppDomain.CurrentDomain.BaseDirectory

于 2019-02-14T08:27:06.423 回答