为什么我的控制台应用 运行 来自 System32?

Why is my Console app running from System32?

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

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

的错误电子邮件

Access to the path 'C:\WINDOWS\system32\myLogs\' is denied.

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

问:为什么会这样?


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

var logpath = Directory.GetCurrentDirectory() + Properties.Settings.Default.LogPath;

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

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

我认为错误是在 checking/creating 文件夹上触发的。 我的应用程序应该在与我的控制台应用程序相同的目录中创建 myLog 文件夹。

问: 为什么 运行ning 来自 System32 文件夹?

控制台应用程序是 "command line",它们是 CMD.EXE 中的 运行,通常位于 C:\Windows\System32\

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

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

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

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

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

与其更改计划任务的开始目录,不如 find the the directory where the console application executable is located:

System.Reflection.Assembly.GetExecutingAssembly().Location