CLI-Programm zum Terminieren zwingen

Diskutiere CLI-Programm zum Terminieren zwingen im Software Allgemein Forum im Bereich Software Forum; Hallo, ehrlich gesagt hätte ich für mein Problem einen Titel wählen müssen, der über mehrere Zeilen geht. Ich sitz seit 3 Tagen an einem Problem...
B

buggybunny

Threadstarter
Dabei seit
27.10.2006
Beiträge
30
Hallo,

ehrlich gesagt hätte ich für mein Problem einen Titel wählen müssen, der über mehrere Zeilen geht. Ich sitz seit 3 Tagen an einem Problem und komm nicht mehr weiter.

Ich vermute mein Beitrag wird lang, also danke an alle die die Geduld haben ihn sich durchzulesen.....:flenn

Ok, ich versuch es so einfach wie möglich zu halten (warum ich den Beitrag nicht unter Programmierung gepostet habe kommt später):

Situtation:

- ich entwickle eine Java Servlet Applikation
- diese läuft unter dem Tomcat
- OS ist Windows 2000 Server

Anforderung:

- Die Applikation liest Dateien ein, die von beliebigen Laufwerken kommen können
- Deshalb prüfe ich mittels des Tools handle von Microsoft ( klick) ob die Dateien fertig geschrieben wurden)
- Das klappt in einer simplen Test-Main-Klasse auch wunderbar

Das Problem:

- Rufe ich exakt denselben Code in meiner Applikation auf hängt die gesamte Applikation an der Stelle an der ich mir die Ausgabe des Prozesses holen möchte
Code:
bufferedReader = new BufferedReader(new InputStreamReader(process.getInputStream()));

while((line = bufferedReader.readLine()) != null) {

- Kommentiere ich diese Stelle aus, sprich ich verzichte auf das Holen der Eingabe, hängt das Ganze ebenfalls, und zwar an der Stelle wo ich darauf warte das der Prozess terminiert

Code:
process.waitFor()

- Ich kriege keine Exceptions, errors, oder Log-Einträge, das Ganze hängt einfach

Was ich alles ausschließen kann:

  • Security-probleme, sprich das der Tomcat externe Applikationen nicht ausführen kann. Ein "nslookup google.de" funktioniert problemlos usw.
  • Fehlende Rechte: Handle muss mit administrativen Rechten ausgeführt werden. Schaue ich nun mit "handle tomcat*" nach, sehe ich das der Tomcat unter dem user NT-AUTORIT-T/SYSTEM läuft. Schaue ich mir nun die Sicherheitseinstellungen von handle.exe an, sehe ich das "SYSTEM" Vollzugriff auf die handle.exe hat

Schlußfolgerung:

Was schließe ich nun daraus?

Es muss einen Unterschied geben von wo aus diese handle.exe aufgerufen wird.
Aus irgendeinem Grund gibt mir handle.exe - wenn vom Tomcat aus aufgerufen - keine Ausgabe und terminiert auch nicht.
Da das Programm nicht open-source ist kann ich mir natürlich auch nicht anschauen warum das so ist.

Deshalb die Frage an die Windows-Experten:

Woran könnte das liegen?

Kann ich dieses Programm irgendwie zwingen zu terminieren bzw. mir eine Ausgabe zu liefern?

Hier ist mal der Code der - als standalone applikation - funktioniert:

Code:
public class TestIt {

   public static void main(String[] args){

      String pathToFileHandleTool = "C:\\tmp\\Handle\\handle.exe";
      String pathToFile = "C:\\tmp\\openSUSE-10.2-GM-i386-CD3.iso";
      String expectedFileHandleSuccessOutput = "(.*)No matching handles found(.*)";
      System.out.println("pathToFileHandleTool:" + pathToFileHandleTool);
      System.out.println("pathToFile: " + pathToFile);
      System.out.println("expectedFileHandleSuccessOutput: " + expectedFileHandleSuccessOutput);
      
      ProcessBuilder builder = null;
      // check for os
      if(System.getProperty("os.name").matches("(.*)Windows(.*)")) {
         System.out.println("we are on windows..");
      } else {
         System.out.println("we are on linux..");
      }
      builder = new ProcessBuilder( pathToFileHandleTool, pathToFile);
      Process process = null;
      String commandOutput = "";
      String line = null;
      BufferedReader bufferedReader = null;
      try {
         process = builder.start();
         // read command output
         bufferedReader = new BufferedReader(new InputStreamReader(process.getInputStream()));
         if(!bufferedReader.ready()) {
            System.out.println("bufferedReader not ready!");
         }
          System.out.println("bin vor readline!");
          while((line = bufferedReader.readLine()) != null) {
             commandOutput += line;
                System.out.println("reading in line....");
          }
          System.out.println("bin nach readline!");
          System.out.println("commandoutput: " + commandOutput);
         // wait till process has finished
         process.waitFor();
      } catch (IOException e) {
         System.out.println(e.getMessage());
         e.printStackTrace();
      }  catch (InterruptedException e) {
         System.out.println(e.getMessage());
         e.printStackTrace();      }
      // check output to assure that no process uses file
      if(commandOutput.matches(expectedFileHandleSuccessOutput))
         System.out.println("no other processes accesses file!");
      else
         System.out.println("one or more other processes access file!");
   }
}

Ich hoffe mir kann hier jemand helfen.....
 
Thema:

CLI-Programm zum Terminieren zwingen

CLI-Programm zum Terminieren zwingen - Ähnliche Themen

Problem bei Installation von SP3 für XP Home Edition: Moin, Beim Installationsversuch von XP3 bricht der Vorgang beim Sichern der Registrierungsdateien immer ab. Meldung: Service Pack 3 Setup Fehler...
FritzBox 7270 - apache Webserver: Hallo, ich versuche gerade über diese Beschreibung einen Webserver auf die Fritzbox zu installieren. Folgendes ist bislang erfolgt: - Apache...
Is there a Hacker Ethic for 90s Hackers?: Is there a Hacker Ethic for 90s Hackers? by Steven Mizrach Introduction The goal of this text analysis project was to take the texts of the...
Fixed Bugs in Windows XP SP1: Q282010 ACC2002: Updated Version of Microsoft Jet 4.0 Available in Download Center Application Compatibility 9/5/2002 4:39:00 PM Q307754 Cannot...
Oben