Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 计划任务未触发windows Server 2008 R2上的exe_C#_.net_Scheduled Tasks_Console Application_Windows Server 2008 R2 - Fatal编程技术网

C# 计划任务未触发windows Server 2008 R2上的exe

C# 计划任务未触发windows Server 2008 R2上的exe,c#,.net,scheduled-tasks,console-application,windows-server-2008-r2,C#,.net,Scheduled Tasks,Console Application,Windows Server 2008 R2,我有一个控制台应用程序,其目标版本是.NETFramework 3.5。当我试图手动触发已编译的exe时,程序将执行并完美地完成其工作。但是,在使用任务调度器时,根本不会触发exe 任务调度程序中的错误详细信息如下: 上次运行结果0xE0434F4D 编辑: 事件日志如下所示: Fault bucket , type 0 Event Name: CLR20r3 Response: Not available Cab Id: 0 Problem signature: P1: flvtomp4co

我有一个控制台应用程序,其目标版本是.NETFramework 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家庭的精彩世界。 这是关于您的应用程序计划在任务计划程序中运行的用户以及特定用户对应用程序处理过程中涉及的所有(!!!)文件夹的权限。 此外,您还必须确保此用户有权在安全设置中运行批处理进程。
仅仅成为管理员组的成员是不够的

在我的情况下,这是因为我的控制台应用程序试图在
C:\Windows\System32
中创建
log.txt
文件,而任务计划程序无权在该文件夹中创建新文件

之所以会出现这种情况,是因为我没有指定将日志文件放在哪里的绝对文件名


让我用我的代码示例来解释这一点:

我在这个目录
D:\somefolder\
中有一个程序,
.exe
目录是
D:\somefolder\program.exe

这是我的代码的快照(visual basic)

错:

Dim logFileName As String = "log.txt"
/*
     Create file based on logFileName directory 
*/ 
  • 如果我通过windows资源管理器执行
    .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 
*/
  • 如果我通过windows资源管理器执行
    .exe
    ,它将创建一个日志文件,目录为
    D:\somefolder\log.txt
    (没问题)

  • 如果我通过任务调度器执行
    .exe
    ,它将创建一个日志文件,目录为
    D:\somefolder\log.txt
    (没问题)


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

存在错误这一事实意味着它正在运行,但失败了。这可能是一个权限问题(当您运行它时,它可以做您可以做的事情,当调度程序运行它时,它可能会作为一个更受限制的用户运行)。将调试输出添加到您的程序中,以了解其底部。windows事件日志显示了什么?可能有一个.net异常隐藏在那里的某个地方。这将比一个错误代码更有用。你应该(或者你有没有?)尝试在谷歌上搜索“上次运行结果0xE0434F4D”,你会发现其中的一些。斯宾德:我已经添加了事件日志信息。如果这是一个例外,那么当我手动运行exe时,为什么应用程序运行时没有任何问题?