Search code examples
c#ioscheduled-tasksconsole-applicationsystem32

Why is my Console app running from System32?


I have a console app which is located on my desktop. I have set it to a Scheduled Task to run every 20 Minutes indefinitely. I have turned off auto sleep/hibernate. Then I left my PC ON and locked my desktop for the weekend (2-3 days).

My console app was developed to email me every time it catches an exception. When I returned, checked my inbox received a couple of error emails containing

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

it seemed my console app was being run from System32 not from my Desktop.

Q: Why is it behaving like it?


this is my string on creating my myLog folder path

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

this checks if the folder exists, if not it creates a new folder.

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

I believe the error was triggered on checking/creating the folder. My app should create the myLog folder in the same directory as my console app.

Q: Why is it running from System32 Folder?


Solution

  • Scheduled Tasks are launched by the Task Scheduler service. This service runs inside the C:\Windows\System32\svchost.exe executable. By default, all applications launched by the Task Scheduler are launched with C:\Windows\System32 as the current directory.

    You can change the start directory in the Edit Action dialog of the Task Scheduler:

    Task Scheduler: Edit Action dialog

    You can use environment variables. For example, %USERPROFILE% will set the start directory to the user's profile directory (eg. C:\Users\MyUsername).

    Rather than changing the start directory for the scheduled task, you may want to find the the directory where the console application executable is located:

    System.Reflection.Assembly.GetExecutingAssembly().Location