Как получить папку приложения при запуске программы планировщиком Windows - PullRequest
17 голосов
/ 29 ноября 2011

У меня есть консольное приложение в c #, которое запускается по расписанию планировщиком задач Windows.Приложению нужны некоторые физические файлы из своего собственного каталога, и для этого используется System.IO.Directory.GetCurrentDirectory().

Обычно, когда я запускаю консольное приложение самостоятельно, оно отлично работает.Но когда он запускается планировщиком задач Windows, он возвращает C:\Windows\System32.

Почему это не каталог приложения и есть ли другой способ получить каталог приложения?

Ответы [ 7 ]

27 голосов
/ 29 ноября 2011
Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);

System.IO.Directory.GetCurrentDirectory() вернет текущий каталог выполняющегося процесса, который в данном случае не является вашим приложением.Вышеприведенного достаточно для получения каталога исполнения, в котором выполняется исполняемый файл.

4 голосов
/ 29 ноября 2011

GetCurrentDirectory возвращает этот каталог, потому что, когда планировщик запускает приложение по умолчанию. Если вы хотите узнать каталог, в котором находится ваш двоичный файл, вы можете использовать

Assembly.GetExecutingAssembly().Location

Мне также было бы интересно узнать, установлен ли у вас каталог «Start In» в вашей запланированной задаче - параметр, который также должен указывать текущий каталог приложения при его запуске.

3 голосов
/ 29 ноября 2011
Assembly.GetExecutingAssembly().Location

См. Также GetCallingAssembly() и GetEntryAssembly().

И Каков наилучший способ определения корневого каталога приложения?

1 голос
/ 29 ноября 2011

Можете ли вы попробовать, что это возвращает?

System.IO.Path.GetDirectoryName(Application.ExecutablePath) 
0 голосов
/ 24 мая 2017

AppDomain.CurrentDomain.BaseDirectory Получит каталог, если вы хотите использовать файлы относительно каталога установки.

Также см. Лучший способ получить путь к папке приложения
0 голосов
/ 05 марта 2016

Это старый поток, но для тех, кто ищет, при настройке задачи вы можете назначить расположение в действии задачи, установив необязательное значение: Start in "для вашей exe-папки. GetCurrentDirectory будет нормально работать тогда.

0 голосов
/ 28 января 2013

Я использую My.Application.Info.DirectoryPath указывает на правильный каталог, который вы хотите в планировщике задач Windows.

...