C #: Hvordan skulle jeg utføre denne kommandolinje direkte til java.exe?

stemmer
2

Jeg skriver et program som må kjøre en java.jar server. Jeg trenger å kjøre prosessen direkte slik at jeg kan skrive om utgang til en tekstboks og alt-i-alt har full kontroll over det. Jeg prøvde bare å gjøre det gjennom cmd.exe, men det ville ikke fungere fordi cmd.exe ville bare ringe en ny prosess java.exe og jeg ville ikke ha kontroll over den. Jeg må ringe java.exe direkte slik at jeg kan ha kontroll og få produksjonen. Kan noen av dere fortelle meg hvordan å konvertere denne kommandoen slik at jeg kunne lage en prosess i C # og kaller det?

Jeg trenger denne CMD kommando konvertert:

Java -Xmx1024m -cp ./../libs/*;l2jserver.jar net.sf.l2j.gameserver.GameServer

inn i

en kommandolinje jeg kan sette inn i Process.Arguments slik at jeg kan ringe java.exe direkte.

Jeg har prøvd å gjøre det ... og det bare ikke vil fungere.

Jeg har vært å se på dette i timesvis ... behage noen hjelpe!

Publisert på 26/05/2009 klokken 07:08
kilden bruker
På andre språk...                            


1 svar

stemmer
4

En del av problemet kan være at til tross for hva ramme dokumentasjonen sier hjelp Process ikke alltid løse ting mot miljøvariabelen PATH riktig. Hvis du vet navnet på mappen Java er i så bruke hele banen til java.exe, ellers bruke en funksjon som følgende:

    private void LocateJava()
    {
        String path = Environment.GetEnvironmentVariable("path");
        String[] folders = path.Split(';');
        foreach (String folder in folders)
        {
            if (File.Exists(folder + "java.exe"))
            {
                this._javadir = folder;
                return;
            } 
            else if (File.Exists(folder + "\\java.exe")) 
            {
                this._javadir = folder + "\\";
                return;
            }
        }
    }

Det er litt Hacky men det vil finne java.exe gitt Java Runtime er installert, og det er mappen er i Windows PATH. Ringe til denne funksjonen første gang programmet må finne Java og deretter senere starte Java ved hjelp av følgende:

   //Prepare the Process
   ProcessStartInfo start = new ProcessStartInfo();
   if (!_javadir.Equals(String.Empty)) {
        start.FileName = this._javadir + "java.exe";
   } else {
        start.FileName = "java.exe";
   }
   start.Arguments = "-Xmx1024m -cp ./../libs/*;l2jserver.jar net.sf.l2j.gameserver.GameServer";
   start.UseShellExecute = false;
   start.RedirectStandardInput = true;
   start.RedirectStandardOutput = true;

   //Start the Process
   Process java = new Process();
   java.StartInfo = start;
   java.Start();

   //Read/Write to/from Standard Input and Output as required using:
   java.StandardInput;
   java.StandardOutput;
Svarte 26/05/2009 kl. 08:05
kilden bruker

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more