2017-02-13 177 views
2

我有一个控制台应用程序位于我的桌面上。我已将其设置为预定任务,无限期地运行每20分钟。我已关闭自动睡眠/休眠。然后,我离开我的电脑并锁定我的桌面周末(2-3天)。为什么我的控制台应用程序从System32运行?

我的控制台应用程序是为了在每次捕捉到异常时向我发送电子邮件而开发的。当我返回时,检查我的收件箱是否收到了几条错误电子邮件,其中包含

访问路径'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

计划任务由任务计划程序服务启动。此服务在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

+0

因此,最好找到我的控制台应用程序的目录,而不是调整与任务计划程序? – Hexxed

+0

完全取决于你想要的东西。如果应用程序应该在EXE的启动目录_(1)中创建一个日志目录,则不要进行任何代码更改并调整Task Scheduler设置。如果应用程序应该在EXE_(1)的同一目录中创建一个日志目录,那么使用'System.Reflection.Assembly.GetExecutingAssembly()。Location'。您可以为两者编写代码,例如首先尝试目录(1),如果失败,则尝试目录(2)。 – Serge

+0

谢谢,我会用场景(2)。 – Hexxed

-1

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

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

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

+0

我的机器是64位,但我设计的应用程序使用x86的目标平台( 32Bit)由于与旧数据库im连接到的问题。 – Hexxed

相关问题