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

23

我有一个用C#编写的控制台应用程序,它由Windows任务计划程序按计划时间启动。

该应用程序需要从其自己的目录中获取一些物理文件,并使用System.IO.Directory.GetCurrentDirectory()进行此操作。

当我手动启动控制台应用程序时,它可以完美运行。但是当它被Windows任务计划程序启动时,它返回C:\Windows\System32

为什么不是应用程序目录,是否有其他方法可以获得应用程序目录?

7个回答

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

System.IO.Directory.GetCurrentDirectory()会返回执行进程的当前目录,而这个执行进程不是你的应用程序。上述代码将足以获取可执行文件所在的执行目录。


重新考虑后,你的回答更好,因为你给了我目录,这正是我所要求的。其他的只是给我汇编文件的路径。 - Erik Dekker
@Erik:你需要的是目录名称还是完整路径? - abatishchev
@abatishchev:好的,我问题中的最后一行是:“我如何获取应用程序目录”,我需要完整的应用程序目录路径。你的答案很好,但它没有给我目录,而是给了我程序集文件。 - Erik Dekker

6

GetCurrentDirectory 返回当前目录是因为当调度程序默认启动一个应用程序时,该目录是活动目录。如果想知道二进制文件所在的目录,可以使用

Assembly.GetExecutingAssembly().Location

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


5

虽然这是一个旧的线程,但是对于一些人来说,在设置任务时,你可以通过将可选项“启动位置”值设置为你的exe文件夹来在任务的操作中分配位置。然后GetCurrentDirectory就能很好地工作了。


易于简单直接。谢谢。 - Warren LaFrance

3

1

1

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


1
你能试试这个返回了什么吗?
System.IO.Path.GetDirectoryName(Application.ExecutablePath) 

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接