12

System.Diagnostics.Process.Start()を使用して、Windowsで外部モノ実行可能ファイルを正常に起動しています。ただし、Macでは失敗します。エラーは発生していません。まったく何も起こりません。

私はそれを次のようにやってみました:

System.Diagnostics.Process.Start("mono", "/path/program.exe");

また、私は次のようにターミナルを開こうとしました(これも失敗しました):

System.Diagnostics.Process.Start("Terminal");

私ができた唯一のことは、次の方法でターミナルを起動することです。

System.Diagnostics.Process.Start("open", "-a Terminal");

何か案は?助けていただければ幸いです。

ありがとう!

4

3 に答える 3

18

あなたがする必要があるのは、実際の実行可能ファイルへのフルパスを使用することです。OSXでは、「アプリ」は実際には.app拡張子が付いた特別に構造化されたフォルダーであり、実行可能ファイルは(通常)の下にありContent/MacOS/[name]ます。

たとえば、ターミナルを開くには:

System.Diagnostics.Process.Start("/Applications/Utilities/Terminal.app/Contents/MacOS/Terminal");

またはテキストエディットの場合:

System.Diagnostics.Process.Start("/Applications/TextEdit.app/Contents/MacOS/TextEdit");

実行可能ファイルを見つけるには、アプリを右クリック(またはControlキーを押しながらクリック)して[パッケージの内容を表示]を選択すると、Finderに実際のフォルダーが開きます。次に、フォルダに移動しContents/MacOSて実際の実行可能ファイルを見つけることができます。

Mono実行可能ファイルを実行するには、mono実行可能ファイルへのフルパスを使用し、プログラムを引数として渡す必要があります。通常、それは次のようなものになるでしょ/usr/local/bin/mono/usr/bin/mono

例えば:

System.Diagnostics.Process.Start("/usr/bin/local/mono /Users/Ilya/Projects/SomeApp.exe");

明らかに、.exeファイルへの実際のパスを使用します。上記は単なる例です。

于 2013-03-17T05:49:52.863 に答える
0

Monoのあまり知られていない機能は、.exeファイルを直接実行できることです(Windowsでの実行方法と互換性があるだけでなく、利便性のためにも)。元の実行可能ファイルを開始したのと同じMonoVMを使用して開始されます。言い換えれば、次のことが簡単にできます。

Process.Start("Test.exe");

まあ、少なくともそれはLinuxで私のために働く;)

編集:

これがその機能のソースであり、すべてのプラットフォームで機能するはずです。

于 2013-03-18T14:46:14.713 に答える
0

ブライアンの答えを拡張するために、コード内のパスをハードコーディングしない/usr/bin/local/でください。

各システムの正しいパスを見つけるには、さまざまな手法がありますが、どれが最適かわかりません。

  • which monoフルパスを見つけるために使用します。whichこのためには、別のプロセスインスタンスから呼び出す必要があります。(whichすべてのMacシステムにデフォルトで付属しているかどうかはわかりません)
  • pkg-configを使用して、Monoがインストールされているプレフィックスを判別します。ただし、システムのpkg-configを単純に呼び出すことはできないことに注意してください。最初に、monoのpkg-configが存在するかどうかを確認する必要があります。そのためには、このハードコードされたパスが存在するかどうかを確認する必要があります:(ここ/Library/Frameworks/Mono.framework/Versions/Current/bin/pkg-configで行われているように)。
于 2013-03-17T13:09:43.060 に答える