我有一个位于桌面上的控制台应用程序。我已将其设置为计划任务,每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
文件夹运行?
答案 0 :(得分:6)
计划任务由任务计划程序服务启动。此服务在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
答案 1 :(得分:-1)
控制台应用程序是"命令行"它们从CMD.EXE运行,通常位于C:\ Windows \ System32 \
我怀疑计划任务将当前目录设置为CMD.EXE所在的位置,然后通过指定完整文件夹启动应用程序,
(注意\ Syswow64 \中有一个用于64位计算机的32位命令行。)