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正在加载的基于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