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
如果要使用相对于安装目录的文件,将获取目录。
【讨论】:
以上是关于Windows任务计划程序启动程序时如何获取应用程序文件夹的主要内容,如果未能解决你的问题,请参考以下文章
windows任务计划程序是怎么回事,有啥用途,该怎么设置??
当应用程序具有 NotifyIcon 时,任务计划程序给出 0xE0434352