如何在Windows任务计划程序启动程序时获取应用程序文件夹

时间:2011-11-29 15:29:05

标签: c# .net windows scheduled-tasks

我在c#中有一个控制台应用程序,它由Windows任务调度程序在学习时间开始。 该应用程序需要来自其目录的一些物理文件,并使用System.IO.Directory.GetCurrentDirectory()

当我自己启动控制台应用程序时,它运行正常。但是当它由Windows任务计划程序启动时,它将返回C:\Windows\System32

为什么这不是应用程序目录,是否有另外一种方法可以获取应用程序目录?

7 个答案:

答案 0 :(得分:27)

Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);

System.IO.Directory.GetCurrentDirectory()将返回执行进程的当前目录,该目录不是此实例中的应用程序。以上内容足以获取运行可执行文件的执行目录。

答案 1 :(得分:4)

GetCurrentDirectory返回该目录,因为默认情况下调度程序启动应用程序时。如果您想知道二进制文件所在的目录,可以使用

Assembly.GetExecutingAssembly().Location

我也很想知道您是否在计划任务中设置了“开始”目录 - 该设置还应该在应用程序启动时设置当前目录。

答案 2 :(得分:3)

Assembly.GetExecutingAssembly().Location

另请参阅GetCallingAssembly()GetEntryAssembly()

What is the best way to determine application root directory?

答案 3 :(得分:1)

你可以试试这回来吗?

System.IO.Path.GetDirectoryName(Application.ExecutablePath) 

答案 4 :(得分:0)

我使用My.Application.Info.DirectoryPath指向Windows任务调度程序中所需的正确目录。

答案 5 :(得分:0)

它是一个旧线程,但对于某人看,在设置任务时,您可以通过设置可选项来分配任务操作中的位置:启动“值到您的exe文件夹.GetCurrentDirectory将正常工作然后

答案 6 :(得分:0)

AppDomain.CurrentDomain.BaseDirectory如果要使用相对于安装目录的文件,将获取目录。

另见Best way to get application folder path