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

Posted

技术标签:

【中文标题】Windows任务计划程序启动程序时如何获取应用程序文件夹【英文标题】:How to get application folder when program is started by Windows Task Scheduler 【发布时间】:2012-01-08 22:44:31 【问题描述】:

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

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

为什么这不是应用程序目录,还有其他方法可以获取应用程序目录吗?

【问题讨论】:

【参考方案1】:
Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);

System.IO.Directory.GetCurrentDirectory() 将返回执行进程的当前目录,在这种情况下不是您的应用程序。以上内容足以获取您的可执行文件正在运行的执行目录。

【讨论】:

再想你的答案更好,因为你给了我目录,这就是我要求的。 Rest 为我提供了程序集文件的路径。 @Erik:你需要目录名还是完整路径? @abatishchev:我的问题的最后一行是:“我如何获取应用程序目录”,我需要应用程序目录的完整路径。你的回答很好,但它没有给我目录,它给了我汇编文件。【参考方案2】:

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

Assembly.GetExecutingAssembly().Location

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

【讨论】:

【参考方案3】:

它是一个旧线程,但是对于正在寻找的人来说,在设置任务时,您可以通过将可选的“开始于”值设置为您的 exe 文件夹来分配任务操作中的位置。GetCurrentDirectory 将正常工作.

【讨论】:

简单直接。谢谢【参考方案4】:
Assembly.GetExecutingAssembly().Location

另请参阅 GetCallingAssembly()GetEntryAssembly()

还有What is the best way to determine application root directory?

【讨论】:

【参考方案5】:

你能试试这个返回什么吗?

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

【讨论】:

【参考方案6】:

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

【讨论】:

【参考方案7】:

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

另见Best way to get application folder path

【讨论】:

以上是关于Windows任务计划程序启动程序时如何获取应用程序文件夹的主要内容,如果未能解决你的问题,请参考以下文章

如何使用任务计划程序重新启动 Windows 服务

服务器重新启动后,Windows 任务计划程序无法运行

windows任务计划程序是怎么回事,有啥用途,该怎么设置??

当应用程序具有 NotifyIcon 时,任务计划程序给出 0xE0434352

如何使用 PowerShell 在系统重新启动后延迟 10 分钟在 Windows 任务计划程序中安排任务?

如果在没有任何用户登录的情况下从任务计划程序启动应用程序是不可见的