Java und Vista UAC

  • Themenstarter Themenstarter Claude M
  • Beginndatum Beginndatum
Status
Nicht offen für weitere Antworten.
C

Claude M

Gast
Hallo Forum!!

Ich habe Probleme mein Programm an Vista anzupassen. Es gibt zwar Dokumente im Internet die einem dabei helfen sollen aber nichts speziell für Java. Oder ich hab's nur nicht gefunden.
Vielleicht hat mir jemand einen Link?

Ein grosses Problem welches ich habe ist folgendes:

Wie teste ich die Schreibrechte bei Vista?
new File("foo").canWrite() gibt praktisch immer true zurück, auch wenn man nur mit Adminrechten die Datei ändern darf. Ich muss eine bestehende Datei umbenennen (renameTo) und das wieder rückgängig machen um zu sehen ob ich Schreibrechte habe. Ist das ein Bug von Vista oder von Java oder mache ich was falsch?

Was ich konkret anstellen will:

Also ich hab ein Programm mit Updatefunktion. Als Installer wird install4j verwendet.

Normalerweise wird Software als Admin installiert. Das ist auch gut so und ich will auf keinen Fall den User zwingen das Programm im home zu installieren, das wäre wirklich sehr unschön.

Das Update ist so gelöst:
Das Haupt-Jar startet per exec() ein update.jar welches das Programm mit einer runtergeladen Version ersetzen soll.
(Anmerkung: Das ist nur auf Win so, denn auf Unix kann ein Jar sich selbst ersetzen.)

Die Mac- und Linux-User haben eh keine andere Möglichkeit als das Tool als root zu starten denn sonst geht garnichts.

Auf WinXP ist man meist eh Admin und somit hat der User kein Problem mit dem Update (dafür einige Sicherheitsprobleme, aber das ist ein anderes Thema).

Auf Vista klappt das Update nicht, denn der User hat keine Adminrechte, wenn er eine Applikation wie die meine normal startet. Nur wenn Vista erkennt, dass es ein Installer oder Update-Tool ist gibt er dem Programm mehr Rechte. da ich aber /bin/java starte und nicht ein eigenes binary hat mein updater diese Rechte nicht.

Momentan gebe ich eine Meldung aus dass der User das Programm als Administrator starten muss (Rechtsklick) und dann klappts auch. Schöner wärs wenn ich so eine Vistameldung bringen kann und der User bestätigen muss dass es ok ist was mein Programm da tun will. (Wer gksudo kennt weiss was ich meine.)

Claude
 
OK, vielen dank. Werde mir die Links dann mal genauer anschauen.

In dem Fall werde ich mit Delphi ein kleines update.exe erstellen welches dann mein update.jar startet.
Vielleicht geht's ja dann.
 
OK, bin nun soweit, dass das Update funktioniert.
man braucht einfach nur ein update.exe welches dann folgendes ausführt:
Code:
java -jar update.jar
da update.exe nicht signiert ist muss der User das bestätigen.
weil update.exe das wort "update" enthält weiss Vista, dass es mehr Rechte benötigt.
Wenn update.exe dann java ausführt erbt dies die Rechte von update.exe.

Wenn der Benutzer als Gast eingeloggt ist geht's aber trotzdem nicht!

Claude
 
hab jetzt bemerkt dass das doch nicht geht.
man müsste erst einen Registry-Eintrag setzen damit java überhaupt ein exe ausführen kann. ansonsten geht garnichts.
Windows würde das zwar unter umständen selbst machen aber bei meiner Applikation nicht. vermutlich weil ich einen Starter verwende und nicht direkt java.exe ausgeführt wird.

Claude
 
Seltsam ist das Eclipse das anscheinend selbst nicht verwendet?!
Die Speichern die Updates im Userverzeichnis, was ja nicht gerade schön ist.
Das ist nicht nur nicht nicht schön, sondern sogar erwünscht. In einem Mehrbenutzerszenario kann dadurch jeder sein eigenes set an PlugIns und Updates haben, ohne das es einfluss auf andere Benutzer hat.
 
Du könntest auch den "upzudatenden" Teil deiner App in %APPDATA% packen - damit hast du die Schreibberechtigung sichergestellt. Blöd nur dann, wenn die Core upgedatet werden muss.
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben