为什么我的控制台应用程序从System32运行?

时间:2017-02-13 02:52:29

标签: c# io scheduled-tasks console-application system32

我有一个位于桌面上的控制台应用程序。我已将其设置为计划任务,每20分钟无限期运行一次。我已经关闭了自动睡眠/休眠状态。然后我将电脑打开并锁定桌面周末(2-3天)。

我的控制台应用程序是在每次捕获异常时通过电子邮件发送给我的。当我退回时,检查我的收件箱收到了几封包含

的错误电子邮件
  

访问路径' C:\ WINDOWS \ system32 \ myLogs \'被拒绝。

似乎我的控制台应用程序是从System32而不是从Desktop运行的。

问:为什么表现得像?

这是我创建myLog文件夹路径

的字符串
var logpath = Directory.GetCurrentDirectory() + Properties.Settings.Default.LogPath;

检查文件夹是否存在,如果不存在则创建新文件夹。

if (!Directory.Exists(logpath))
   Directory.CreateDirectory(logpath);

我认为在检查/创建文件夹时触发了错误。 我的应用程序应该在与我的控制台应用程序相同的目录中创建myLog文件夹。

问:为什么它从System32文件夹运行?

2 个答案:

答案 0 :(得分:6)

计划任务由任务计划程序服务启动。此服务在C:\Windows\System32\svchost.exe可执行文件内运行。默认情况下,任务计划程序启动的所有应用程序都以C:\Windows\System32作为当前目录启动。

您可以在任务计划程序的“编辑操作”对话框中更改起始目录:

Task Scheduler: Edit Action dialog

您可以使用环境变量。例如,%USERPROFILE%会将起始目录设置为用户的配置文件目录(例如,C:\ Users \ MyUsername)。

您可能需要find the the directory where the console application executable is located

,而不是更改计划任务的起始目录
  

System.Reflection.Assembly.GetExecutingAssembly().Location

答案 1 :(得分:-1)

控制台应用程序是"命令行"它们从CMD.EXE运行,通常位于C:\ Windows \ System32 \

我怀疑计划任务将当前目录设置为CMD.EXE所在的位置,然后通过指定完整文件夹启动应用程序,

(注意\ Syswow64 \中有一个用于64位计算机的32位命令行。)