2016-09-20 11 views
2

私は奇妙な問題があります。私は個人的な使用のためにC#.NET 4.6でカスタムスパムフィルタを作成しました。そして、私はこのプログラムを自分のラズベリーパイに入れました。Monoが間違った現在のディレクトリでプログラムを実行します

私はプログラムを何度もテストしていますが、すべて正常に動作しましたが、私がcronjobを作成したときにプログラムがログを書き込まないことに気付きました。

私は再びテストするために始めたので、私は、私はプログラムのベースディレクトリからプログラムを起動したときに、それが正常に動作し、問題があることを、見つけるている:

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

が、私は別のディレクトリから起動絶対パス:

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

必要なファイルの相対パスが正しくありません。

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

私は「ファイルが見つかりませんでした」を取得/:私は/ homeディレクトリにいるよ、と私のプログラムは、ホーム/ユーザー/ programディレクトリ/にある、と私はこれを実行した場合たとえば

ホーム/ xyz.txt ""

Path.GetFullPath()Environment.CurrentDirectoryを使用してプログラム内の相対パスから絶対パスを作成しようとしましたが、何も変更されませんでした。

私の質問です:現在のディレクトリが正しい別のディレクトリでmonoプログラムを実行するオプションはありますか?

私は、bashスクリプトが私の最初の解決策(cdとそれからmono)を実行できることを知っています。それはcronでも使用できますが、もっと簡単な解決法があるかどうかを知りたいと思います。

答えて

1

カレントディレクトリが、それはあなたがプロセスを始めているところの現在のディレクトリであり、正しいであり、そのプロセスは、この場合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

+0

ありがとうございます!これは私が探しているものです。 – Lightpower

関連する問題