2012-05-03 61 views
1

如何從C#應用程序啓動Java應用程序?從C#啓動JAR#

我正在製作一個minecraft發射器。有沒有一種通用的方法來從C#應用程序啓動任何jar?

+0

Windows標籤? – dwerner

+2

可能的重複http://stackoverflow.com/questions/873809/how-to-execute-a-java-program-from-c和http://stackoverflow.com/questions/129989/how-to-call- java-code-from-c – walther

回答

2

你可以開始jar文件作爲一個新的進程:

string appData = Environment.GetEnvironmentVariable("APPDATA"); 

Process.Start(@"java", 
    @"-Xms512m -Xmx1024m -cp """ + appData + @"\.minecraft\bin\*"" -Djava.library.path=""" + appData + @"\.minecraft\bin\natives"" net.minecraft.client.Minecraft"); 

這是假設java是你PATH(Java安裝時發生默認情況下)。如果不是,請使用java的絕對路徑。

這是直接啓動遊戲 - 如果用戶告訴你他們把它放在哪裏,你可以使用minecraft啓動器。在Windows上,這是一個exe文件,所以你可以直接啓動它。

此外,APPDATA是一個窗口的變量。對於Linux,路徑是$HOME~/。另外,參數並不完全相同。假設你的用戶將使用Mono for linux(或蘋果)運行你的應用程序。我沒有Mono方便地測試您的選項,但您可以使用

public static bool IsLinux 
{ 
    get 
    { 
     int p = (int) Environment.OSVersion.Platform; 
     return (p == 4) || (p == 6) || (p == 128); 
    } 
} 

爲了幫助您選擇正確的啓動路徑。上述代碼被發現here。我注意到上面示例中的屬性被稱爲IsLinux,但Mono文檔的引用說6適用於Mac OS X.這使我相信該屬性實際上應該稱爲IsUnix(因爲蘋果的狂熱分子繼續宣揚這種情況儘管蘋果和Windows一樣是unix)。我手邊沒有macware來測試這個,我把它留給學生。

+0

等等,我以爲它會像字符串appData = Environment.GetEnvironmentVariable(「%APPDATA%」);進入appdata文件夾 – Matthewj

+0

@Matthewj nope,這些%只是在命令行上用來觸發var查找,var的名字就是appdata。 – payo

+0

好的,所以我試了一下代碼,它打開了一個java命令promp,幾秒鐘後它關閉,但我的世界不打開。 – Matthewj