Mono 使用错误的当前目录执行程序
Mono executes program with wrong current directory
我有一个奇怪的问题。我在 C# .NET 4.6 中编写了一个自定义垃圾邮件过滤器供个人使用。我把这个程序放到了我的 Raspberry Pi.
我已经对该程序进行了多次测试,一切正常,但是当我创建一个 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
我收到“找不到文件”/home/xyz.txt”“
我尝试使用 Path.GetFullPath()
和 Environment.CurrentDirectory
从程序中的相对路径创建绝对路径,但没有任何改变。
所以我的问题是:是否可以选择 运行 另一个目录中具有正确当前目录的单声道程序?
我知道 bash 脚本可以执行我的第一个解决方案(cd 然后是单声道)并且它可以在 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);
我有一个奇怪的问题。我在 C# .NET 4.6 中编写了一个自定义垃圾邮件过滤器供个人使用。我把这个程序放到了我的 Raspberry Pi.
我已经对该程序进行了多次测试,一切正常,但是当我创建一个 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
我收到“找不到文件”/home/xyz.txt”“
我尝试使用 Path.GetFullPath()
和 Environment.CurrentDirectory
从程序中的相对路径创建绝对路径,但没有任何改变。
所以我的问题是:是否可以选择 运行 另一个目录中具有正确当前目录的单声道程序?
我知道 bash 脚本可以执行我的第一个解决方案(cd 然后是单声道)并且它可以在 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);