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

C# 为什么我的控制台应用程序是从System32运行的?,c#,io,scheduled-tasks,console-application,system32,C#,Io,Scheduled Tasks,Console Application,System32,我有一个控制台应用程序,它位于我的桌面上。我已将其设置为计划任务,无限期每20分钟运行一次。我已关闭自动睡眠/休眠。然后我把电脑开着,并在周末(2-3天)锁定了我的桌面 我的控制台应用程序被开发成每次捕获异常时都给我发电子邮件。当我返回时,我的收件箱收到了几封错误电子邮件,其中包含 对路径“C:\WINDOWS\system32\myLogs\”的访问被拒绝 似乎我的控制台应用程序是从System32运行的,而不是从我的桌面运行的 Q:为什么它的行为如此 这是我创建我的myLog文件夹路径时的

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

我的控制台应用程序被开发成每次捕获异常时都给我发电子邮件。当我返回时,我的收件箱收到了几封错误电子邮件,其中包含

对路径“C:\WINDOWS\system32\myLogs\”的访问被拒绝

似乎我的控制台应用程序是从
System32
运行的,而不是从我的
桌面运行的

Q:为什么它的行为如此


这是我创建我的
myLog
文件夹路径时的字符串

var logpath = Directory.GetCurrentDirectory() + Properties.Settings.Default.LogPath;
这将检查文件夹是否存在,如果不存在,将创建一个新文件夹

if (!Directory.Exists(logpath))
   Directory.CreateDirectory(logpath);
我相信该错误是在检查/创建文件夹时触发的。 我的应用程序应该在与我的控制台应用程序相同的目录中创建
myLog
文件夹

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

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

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


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

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

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

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

您可能希望执行以下操作,而不是更改计划任务的开始目录:

System.Reflection.Assembly.getExecutionGassembly().Location


因此,找到我的控制台应用程序的目录比调整任务调度程序更好?这完全取决于你想要什么。如果应用程序应在启动EXE的目录(1)中创建日志目录,则不要进行任何代码更改,而是调整任务计划程序设置。如果应用程序应在与EXE(1)相同的目录中创建日志目录,则使用
System.Reflection.Assembly.getExecutionGassembly().Location
。您可以同时为这两种情况编写代码,例如,如果失败,请先尝试目录(1),然后尝试目录(2)。谢谢,我将使用场景(2)。我的计算机是64位的,但我设计的应用程序的平台目标是x86(32位),因为我连接的旧数据库存在问题。