tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
6
ZUGRIFFE
700
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    java123 java123 ist offline Mitglied Bronze
    Registriert seit
    Jun 2009
    Beiträge
    37
    Hallo zusammen,

    ich habe in meiner Applikation den Aufruf um ein File mit dem Standardeditor zu öffnen.
    Code java:
    1
    
    Desktop.getDesktop().open(fileToOpen);
    Dieser Aufruf funktioniert bei acht Mitarbeitern, nur bei einem nicht. Es passiert rein gar nichts.WIr sind hier alle im selben Büro, haben dieselben Laptops und gleiche Installationen drauf (WinXP, SP3 und JRE 1.6.0.10).

    Code java:
    1
    2
    
    Desktop.isDesktopSupported();
    Desktop.getDesktop().isSupported(Desktop.Action.OPEN);
    liefern beide true zurück bei diesem Mitarbeiter.
    — Andere Methoden wie mail() und browse() funktionieren, edit() allerdings auch nicht.
    — Throwable catchen nützt nichts, ich bekomme keinen Fehler
    — Im Task Manager ist kein Prozess des verknüpften Editors zu sehen, es wird also nichts gestartet
    — Den Fehler bemerkt haben wir bei «.txt» Dateien, diese Dateiendung wird bei diesem Benutzer standardmässig mit Codewrite geöffnet. Die Dateiendung mit gar keinem Programm zu verknüpfen, Ultraedit, Notepad und noch einigen anderen haben auch nicht geholfen. Auch mit z. B. «.xls» Dateien, die mit MS Office Excel verknüpft sind, funktioniert es nicht.
    — In der Registry haben wir keine Anpassungen gemacht, welche und wie die Parameter der exe übergeben werden. Dia Dateitypzuordung haben wir immer über den Windows Explorer geändert.
    Code java:
    1
    
    Runtime.getRuntime().exec("notepad" + fileToOpen.getAbsolutePath());
    oder irgendein anderer Befehl funktioniert.

    Danach habe ich ein bisschen tiefer gegraben und per Google die DLL Aufrufe
    Code :
    1
    2
    
    rundll32 SHELL32.DLL,ShellExec_RunDLL <file>
    rundll32 URL.DLL,FileProtocolHandler file:<file>
    gefunden. Einer der beiden wird wahrscheinlich von Java bei der Windows Implementation schlussendlich aufgerufen. Diese kann ich per cmd und auch von Java per Runtime#exec() ohne Probleme bei diesem Benutzer aufrufen. Die Shell32.dll ist genau die gleiche wie bei mir und alle Dateien im JRE Verzeichnis sind laut einem Binärvergleich genau gleich, er hat die Java Installation also nicht putt gemacht (neu installieren können wir leider nicht einfach, aber es sollte alles korrekt sein).

    Ich bin jetzt soweit, dass ich halt den rundll32 Aufruf implementiert habe, da die Applikation sowieso nur auf Windows läuft. Die Lösung des Problems würde mich jedoch doch noch interessieren, da ich viel Zeit in die Fehlersuche investiert habe. Hat noch jemand eine Idee, was bei diesem Benutzer anders sein könnte und den Fehler verursacht?

    Ich habe noch eine andere native Implementierung der Shellexec für Windows gefunden: http://www.heimetli.ch/shellexec.html. Der Aufwand, um das noch zu testen, wäre für mich wahrscheinlich zu hoch, da ich keine Ahnung habe was ich wie ersetzen müsste etc. Keine Ahnung also ob das funktionieren würde.

    Besten Dank.
     

  2. #2
    Avatar von mccae
    mccae mccae ist offline Senfdazugeber
    Registriert seit
    Dec 2007
    Ort
    Wien
    Beiträge
    226
    Huhu,

    Hast du auch wirklich genau überprüft, ob OPEN mit der entsprechende Anwendung verknüpft ist?

    Schau mal hier:
    Datei mit dem Standardprogramm öffnen funktioniert nicht-opendirektive.jpg

    Hast du auch die Registryeinträge unter HKCR\.txt verglichen?

    Soweit ich weiß, führt Java auch nur einen einfachen ShellExec mit OPEN aus.

    Ich selbst benutze jedoch eine eigens geschriebene JNI .dll, da ich auch öfters etwas "Als Administrator" starten muss (mit "runas").

    Gruß,
     

  3. #3
    java123 java123 ist offline Mitglied Bronze
    Registriert seit
    Jun 2009
    Beiträge
    37
    Jup ist es und auch die Registryeinträge sind bei mir und dem anderen Mitarbeiter gleich.
     

  4. #4
    Avatar von mccae
    mccae mccae ist offline Senfdazugeber
    Registriert seit
    Dec 2007
    Ort
    Wien
    Beiträge
    226
    Hm,

    Warum es über einen Umweg dennoch funktioniert, ist mir nicht klar.
    Wenigstens funktioniert's über rundll.

    Allerdings würde es mich interessieren warum das Ganze nicht funktioniert.
    Wenn man das JDK mit den Sources installiert, kann man im Debugmodus die Aufrufe bishin zur nativen Methode verfolgen und analysieren.

    Gruß,
     

  5. #5
    Avatar von vfl_freak
    vfl_freak vfl_freak ist offline Mitglied Diamant
    Registriert seit
    Aug 2007
    Ort
    Niedersachsen
    Beiträge
    2.161
    Moin,

    Zitat Zitat von java123 Beitrag anzeigen

    Code java:
    1
    
    Runtime.getRuntime().exec( "notepad" + fileToOpen.getAbsolutePath() );
    nur so eine Idee: sollte nicht zwischen Anwendung und dem Dateipfad ein Blank stehen

    Gruß
    Klaus
     
    Es ist noch kein Meister vom Himmel gefallen - sonst hätte man schon längst seine Leiche gefunden !!

    Falls ich helfen konnte, wäre eine Bewertung oder ein Danke nett ;-)
    -------------------------------------------------------------------------------------------------
    Ich beantworte keine Fragen per PN !!
    Stellt Eure Fragen im Forum - dann haben alle etwas davon !!

  6. #6
    Avatar von mccae
    mccae mccae ist offline Senfdazugeber
    Registriert seit
    Dec 2007
    Ort
    Wien
    Beiträge
    226
    Huhu,
    Zitat Zitat von vfl_freak Beitrag anzeigen
    nur so eine Idee: sollte nicht zwischen Anwendung und dem Dateipfad ein Blank stehen
    Der TE hat ja gesagt, es funktioniert auf diese Weise.
    Er hat anscheinend beim Erstellen dieses Beispiels einfach nur das Leerzeichen vergessen.

    Gruß,
     

  7. #7
    java123 java123 ist offline Mitglied Bronze
    Registriert seit
    Jun 2009
    Beiträge
    37
    Zitat Zitat von mccae Beitrag anzeigen
    Huhu,
    Der TE hat ja gesagt, es funktioniert auf diese Weise.
    Er hat anscheinend beim Erstellen dieses Beispiels einfach nur das Leerzeichen vergessen.
    Gruß,
    Korrekt, habe ich einfach vergessen und über den IE und FF am Arbeitsplatz kann ich nicht bearbeiten, die Browser sind ewig am Laden wenn ich «Bearbeiten» anklicke.

    Bis zum WDesktopPeer#ShellExecute(URI uri, String s) Aufruf konnte ich es noch nachverfolgen und die dort übergebenen Argumente waren beim anderen Mitarbeiter und mir gleich. Danach wird die native ShellExecute Methode aufgerufen. Ich habe noch ein kleines VBA Skript (Applikation oder was es auch immer ist) geschrieben und auch ein ShellExecute Aufruf mit den gleichen Parametern durchgeführt

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    
    Sub foo()
      Dim Retval As Long
     
      Retval = ShellExecute(0, "open", "K:\temp\foo.txt", _
        "", "c:\", SW_SHOWNORMAL)
     'Fehlerhandling entfernt
     
    End Sub
     
    Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" ( _
      ByVal hwnd As Long, _
      ByVal lpOperation As String, _
      ByVal lpFile As String, _
      ByVal lpParameters As String, _
      ByVal lpDirectory As String, _
      ByVal nShowCmd As Long) As Long

    Unterdessen bin ich mir nicht mehr so sicher, was ich damit testen wollte, jedenfalls funktionierte der Aufruf.

    Danke für eure Hilfe, aber ich glaube kaum, dass noch eine Lösung gefunden wird :/
     

Ähnliche Themen

  1. Standardprogramm zum Öffnen herausfinden
    Von DrMueller im Forum Visual Basic 6.0
    Antworten: 14
    Letzter Beitrag: 09.01.12, 12:21
  2. Antworten: 6
    Letzter Beitrag: 28.02.11, 13:57
  3. Access 2000 / 2003; Datei mit externem Standardprogramm öffnen
    Von jeipack im Forum Office-Anwendungen
    Antworten: 0
    Letzter Beitrag: 14.04.10, 15:02
  4. php Datei als Popup öffnen funktioniert nicht.
    Von metty im Forum Flash Plattform
    Antworten: 4
    Letzter Beitrag: 30.03.05, 14:46
  5. Datein mit entsprechendem Standardprogramm öffnen
    Von EriFo im Forum VisualStudio & MFC
    Antworten: 1
    Letzter Beitrag: 03.07.04, 21:33

Stichworte