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

发布于 2024-12-18 20:28:11 字数 252 浏览 2 评论 0原文

我有一个 C# 控制台应用程序,它由 Windows 任务计划程序按预定时间启动。 该应用需要来自其自己目录的一些物理文件,并为此使用 System.IO.Directory.GetCurrentDirectory() 。

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

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

I have a console app in c# thats starts on schuled times by the Windows task scheduler.
The app needs some physical files from its own directory and uses System.IO.Directory.GetCurrentDirectory() for that.

Normal when I start the console app myself, it works perfectly. But when it is started by Windows Task Scheduler, it returns C:\Windows\System32.

Why is this not the application directory and is there another way how I can get the application directory?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(7

苦行僧 2024-12-25 20:28:12
Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);

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

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

System.IO.Directory.GetCurrentDirectory() will return the current directory of the executing process which is not your application in this instance. The above will suffice in getting the execution directory your executable is running in.

随心而道 2024-12-25 20:28:12

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

Assembly.GetExecutingAssembly().Location

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

GetCurrentDirectory returns that directory because when the scheduler starts an application by default. If you want to know the directory that your binary is in, you can use

Assembly.GetExecutingAssembly().Location

I would also be curious to know if you have a "Start In" directory set in your scheduled task - setting that should also set the current directory of the application when it starts.

晨曦慕雪 2024-12-25 20:28:12

它是一个旧线程,但对于寻找的人来说,在设置任务时,您可以通过将可选的 :Start in" 值设置为您的 exe 文件夹,在任务的操作中分配位置。然后 GetCurrentDirectory 就可以正常工作了。

Its an old thread, but for someone looking, while setting up the task, you can assign the location in the Action of the task, by setting the optional :Start in" value to your exe folder. GetCurrentDirectory will work fine then.

他夏了夏天 2024-12-25 20:28:12
Assembly.GetExecutingAssembly().Location

另请参阅 GetCallingAssembly()GetEntryAssembly()

确定应用程序根目录的最佳方法是什么?

Assembly.GetExecutingAssembly().Location

See also GetCallingAssembly() and GetEntryAssembly().

And What is the best way to determine application root directory?

方圜几里 2024-12-25 20:28:12

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

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

Can you try what this returns ?

System.IO.Path.GetDirectoryName(Application.ExecutablePath) 
情愿 2024-12-25 20:28:12

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

I use My.Application.Info.DirectoryPath is point to the correct directory what you want within Windows task scheduler.

音盲 2024-12-25 20:28:12

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

Also see Best way to get application folder path

AppDomain.CurrentDomain.BaseDirectory Will get the directory if you want to use files relative to the install directory.

Also see Best way to get application folder path

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文