Mono在错误的当前目录下执行程序

本文关键字:执行程序 当前目录 错误 Mono | 更新日期: 2023-09-27 18:08:01

我有一个奇怪的问题。我在c# . net 4.6中编写了一个自定义的垃圾邮件过滤器供个人使用。我把这个程序安装在我的树莓派上。

我已经测试了很多次这个程序,一切都很好,但是当我创建一个cronjob时,我注意到这个程序从不写日志。

当我再次开始测试时,我发现,问题是,当我从程序的基本目录启动程序时,它工作正常:

> cd path/to/program
> mono program.exe

但是当我从另一个具有绝对路径的目录启动时:

> mono /absolute/path/to/program/program.exe

所需文件的相对路径出错。

例如,如果我在/home目录下,我的程序在/home/user/program目录下,然后我运行这个:

> mono /home/user/program/program.exe

我得到" Could not find file "/home/xyz.txt"

我尝试使用Path.GetFullPath()Environment.CurrentDirectory在程序中从相对路径创建绝对路径,但没有任何改变。

所以我的问题是:是否有任何选项运行mono程序在另一个目录与正确的当前目录?

我知道bash脚本可以执行我的第一个解决方案(cd,然后mono),它可以在cron中使用,但我想知道是否有一个更简单的解决方案。

Mono在错误的当前目录下执行程序

当前目录是正确的,它是您启动进程的当前目录,该进程在本例中是mono,而不是 mono正在加载的基于cil的程序集的位置。

听起来你想要的是ExecutingAssembly的路径。

这适用于x-plat (Windows/Linux/macOS):

string path = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase);
Console.WriteLine(path);

裁判:https://msdn.microsoft.com/en-us/library/aa457089.aspx