我在c#中有一个控制台应用程序,它由Windows任务调度程序在学习时间开始。
该应用程序需要来自其目录的一些物理文件,并使用System.IO.Directory.GetCurrentDirectory()
。
当我自己启动控制台应用程序时,它运行正常。但是当它由Windows任务计划程序启动时,它将返回C:\Windows\System32
。
为什么这不是应用程序目录,是否有另外一种方法可以获取应用程序目录?
答案 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
如果要使用相对于安装目录的文件,将获取目录。