Zu den Aufzeichnungen der tutorials.de-Live-Workshops
ERLEDIGT
NEIN
ANTWORTEN
9
ZUGRIFFE
2079
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Ashaman Ashaman ist offline Mitglied
    Registriert seit
    Sep 2007
    Beiträge
    20
    Hallo,

    ich habe hier ein kleines Problem...
    Die folgende Funktion soll eigentlich nichts anderes machen als eine Datei(in dem Fall nen Skript) zu starten und den Rückgabewert zu übernehmen(der Teil ist noch nicht integriert).

    Das funktioniert im Eclipse auf WinXP auch. Allerdings hab ich das jetzt bei einem Freund unter Vista laufen lassen und bei ihm wird das Skript nicht gestartet.
    Es kommt zu einer IOException.

    Ich bin ein bissl ratlos woran das liegen mag.
    Danke schon mal für eure Hilfe!

    Code java:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    
            public boolean methode() {
                boolean result = false;
                try {
                    // ProcessBuilder builder = new ProcessBuilder( "wscript", "skript.vbs" );
                    ProcessBuilder builder = new ProcessBuilder("rundll32", "url.dll", "FileProtocolHandler", "skript.vbs");
                    File file = new File(this.getClass().getResource("/").getPath());
                    builder.directory(file); 
                    process = builder.start();
                    process.waitFor();
                    if (process.exitValue() == 0) {
                        result = true;
                    }
                } catch(IOException exception) {
                } catch(InterruptedException error) {
                }
                return result;
            }
    Geändert von Oliver Gierke (15.05.08 um 08:37 Uhr) Grund: Code Tags spendiert
     

  2. #2
    Chimaira Chimaira ist offline Mitglied Gold
    Registriert seit
    May 2005
    Beiträge
    143
    Hi,

    soweit ich weiß braucht man bei Vista immer eine Bestätigung um ein neues Programm zu starten. Wenn du also ein Script ... hier skript.vbs ausführst, dann müsste Vista das blocken oder liege ich da falsch?

    Habe zwar kein Vista, aber ich kenne jemanden

    GReeze Chimaira
     
    Wenn mein Beitrag hilfreich war, dann bitte ich diesen zu bewerten!

  3. #3
    Ashaman Ashaman ist offline Mitglied
    Registriert seit
    Sep 2007
    Beiträge
    20
    so kleines update... es muß wohl ein fehler im code sein.
    Der selbe Code führt zum gleichen Fehler auf einem anderen XP Rechner.

    Ich bin wirklich überfragt woran das liegt.
     

  4. #4
    Anime-Otaku Anime-Otaku ist offline Mitglied Brillant
    Registriert seit
    Aug 2005
    Ort
    Karlsruhe (Baden-Württemberg)
    Beiträge
    900
    Du solltest auch die Input/Outputstreams abfangen und ggf. closen wenn du sie nicht brauchst....Ansonsten was bringt er da für ne Ausgabe?
    Geändert von Anime-Otaku (14.05.08 um 14:06 Uhr)
     
    Wäre super wenn ihr euren Code in dieser Form einfügt:
    Code java:
    1
    
    System.out.println("Hello World");
    [java]System.out.println("Hello World");[/java]
    Für erledigte Threads dürft ihr den "erledigt"-Button anklicken!
    Über Dank freut sich jeder, der euch geholfen hat - ein Klick auf "Danke" kostet ja nicht mal was
    Blog: http://javaeffective.wordpress.com/

  5. #5
    Ashaman Ashaman ist offline Mitglied
    Registriert seit
    Sep 2007
    Beiträge
    20
    um die streams wollte ich mich (wenn überhaupt nötig kümmern) sobald das skript überhaupt gestartet wird auf anderen rechnern.
    Die genaue Fehlermeldung werde ich posten sobald ich sie von den anderen bekomme.

    Ist denn an dem Code den ich gepostet hab etwas falsch?

    EDIT:
    Die auswertung von IOException.getMessage() und getCause()

    getMessage()
    Cannot run program "rundll32" (in directory "C:\Program%20Files\eclipse\Eclipse%20Aufgaben\Process"): CreateProcess error=267, Der Verzeichnisname ist ungültig

    getCause()
    java.io.IOException: CreateProcess error=267, Der Verzeichnisname ist ungültig
    Geändert von Ashaman (14.05.08 um 17:56 Uhr)
     

  6. #6
    Anime-Otaku Anime-Otaku ist offline Mitglied Brillant
    Registriert seit
    Aug 2005
    Ort
    Karlsruhe (Baden-Württemberg)
    Beiträge
    900
    meine spontane Idee:

    das
    File file = new File(this.getClass().getResource("/").getPath());
    versuch mal ohne das getPath()....schließlich soll es ja eine URL bleiben
     
    Wäre super wenn ihr euren Code in dieser Form einfügt:
    Code java:
    1
    
    System.out.println("Hello World");
    [java]System.out.println("Hello World");[/java]
    Für erledigte Threads dürft ihr den "erledigt"-Button anklicken!
    Über Dank freut sich jeder, der euch geholfen hat - ein Klick auf "Danke" kostet ja nicht mal was
    Blog: http://javaeffective.wordpress.com/

  7. #7
    Registriert seit
    Jun 2002
    Ort
    Saarbrücken (Saarland)
    Beiträge
    9.724
    Blog-Einträge
    29
    Hallo,

    gibts den Pfad überhaupt in deinem System?
    Weiterhin setzt du mit directory Explizit das aktuelle Working Directory. Wenn das System dann dort rundll32.exe sucht, wird es natürlich nicht gefunden, sofern es nicht da liegt. Gib doch mal den vollqualifizierten Pfad zu rundll32.exe in deinem Command String an. Weiterhin wird dein Pfad als URL behandelt (deshalb die %20) die mit der Endung .vbs Assozierte Anwendung wscript.exe /cscript.exe erwartet einen "richtigen" Pfad.

    Starte das skript doch mal direkt mit "start cmd /c cscript.exe d:\\temp\\bubu.vbs".

    Gruß Tom
     
    Java rocks!
    How to become a good Java Programmer?
    Does IT in Java and .Net
    The only valid measurement of code quality: WTFs / minute
    Blog
    Xing
    Twitter

  8. #8
    Anime-Otaku Anime-Otaku ist offline Mitglied Brillant
    Registriert seit
    Aug 2005
    Ort
    Karlsruhe (Baden-Württemberg)
    Beiträge
    900
    rundll32.exe ist standardmässig in der Path Systemvariablen zu finden ....daher sollte es ohne Probleme gefunden werden..oder?
     
    Wäre super wenn ihr euren Code in dieser Form einfügt:
    Code java:
    1
    
    System.out.println("Hello World");
    [java]System.out.println("Hello World");[/java]
    Für erledigte Threads dürft ihr den "erledigt"-Button anklicken!
    Über Dank freut sich jeder, der euch geholfen hat - ein Klick auf "Danke" kostet ja nicht mal was
    Blog: http://javaeffective.wordpress.com/

  9. #9
    Registriert seit
    Jun 2002
    Ort
    Saarbrücken (Saarland)
    Beiträge
    9.724
    Blog-Einträge
    29
    Hallo,

    kommt drauf an:
    Code :
    1
    2
    3
    4
    5
    6
    
     
    H:\>d:\temp\rundll32.exe
    Der Befehl "d:\temp\rundll32.exe" ist entweder falsch geschrieben oder
    konnte nicht gefunden werden.
     
    H:\>rundll32.exe

    Aber es sieht ja so aus, als ob er rundll32 finden kann. Liegt wohl wirklich daran das der Script Interpreter den Pfad zum Skript als richtigen Verzeichnispfad und nicht als URL erwartet. Mit cscript sollte es gehen.

    schau mal hier:
    http://www.tutorials.de/forum/java/1...s-beenden.html

    Code java:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    
    /**
     * 
     */
    package de.tutorials;
     
    /**
     * @author Thomas.Darimont
     * 
     */
    public class PricessBuilderExample {
     
        /**
         * @param args
         */
        public static void main(String[] args) throws Exception {
            ProcessBuilder processBuilder = new ProcessBuilder("cmd", "/c",
                    "cscript", "d:\\temp\\hello.vbs");
     
            Process process = processBuilder.start();
            int exitValue = process.waitFor();
     
            System.out.println(exitValue);
        }
    }

    Code :
    1
    2
    3
    
     
    D:\>type temp\hello.vbs
    msgbox "Hallo"


    Gruß Tom
     
    Java rocks!
    How to become a good Java Programmer?
    Does IT in Java and .Net
    The only valid measurement of code quality: WTFs / minute
    Blog
    Xing
    Twitter

  10. #10
    Ashaman Ashaman ist offline Mitglied
    Registriert seit
    Sep 2007
    Beiträge
    20
    Vielen dank für eure denkanstöße

    Das problem lag haupsächlich daran dass bei leerstellen im pfadnamen (die %20) der pfad nicht gefunden werden konnte. Auf einen festen pfad wollte ich mich nicht einlassen also hab ich es übergangsweise mit einem relativen pfad zum jar file gelöst.
    Dadurch ist die directory angabe völlig weggefallen da man ja für rundll bzw wscript diesen nicht brauch.

    Ich werd aber eure vorschläge noch mal angehen sobald ich zur verfeinerung komme

    Danke nomma!
     

Ähnliche Themen

  1. Processbuilder mit timeout
    Von Stiffler66 im Forum Java Grundlagen
    Antworten: 5
    Letzter Beitrag: 05.02.10, 11:58
  2. ProcessBuilder
    Von IroNHeinZ im Forum Java Grundlagen
    Antworten: 7
    Letzter Beitrag: 20.12.09, 14:59
  3. ProcessBuilder - cmd fuehrt zu Endlosschleife
    Von Gwaihirr im Forum Java Grundlagen
    Antworten: 2
    Letzter Beitrag: 19.12.09, 22:12
  4. ProcessBuilder, src - bin?
    Von flashray im Forum Java
    Antworten: 4
    Letzter Beitrag: 04.06.07, 21:12
  5. Probleme mit Processbuilder
    Von Daelrik im Forum Java
    Antworten: 4
    Letzter Beitrag: 30.09.06, 15:54