3

我有一个控制台应用程序,它位于我的桌面上。我已将其设置为计划任务,以无限期地每 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文件夹运行?

4

2 回答 2

9

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

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

任务计划程序:编辑操作对话框

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

您可能希望找到控制台应用程序可执行文件所在的目录,而不是更改计划任务的启动目录:

System.Reflection.Assembly.GetExecutingAssembly().Location

于 2017-02-13T03:09:13.003 回答
-1

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

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

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

于 2017-02-13T03:03:34.547 回答