Probleme mit UAC und Windows 7...

mccae

Senfdazugeber
Hallo Leute!

Ich habe leider ein Problem mit meinen Java Applikationen sowie Windows 7.

Da ich mir einen neuen Rechner gekauft habe und ich diesmal für die Zukunft gerüstet seien wollte, habe ich mir Windows 7 dazugekauft, bzw. dazukaufen müssen.

Nach einigen anfänglichen Schwierigkeiten beim Umlernen von Windows XP habe ich alles provisorisch eingerichtet.

Ich musste leider feststellen, dass alle meine Applikationen nach der Installation so gut wie nutzlos sind, da sie nicht in ihre eigenen Installationsordner schreiben dürfen.

Das Problem lässt sich nur lösen, wenn ich meine Applikationen (Mit .exe Launcher) explizit als Administrator starte.
Da jedoch nicht jeder User eben das weiß, wollte ich fragen, ob man dem Programm nicht vielleicht extra Rechte einräumen kann.

Gibt es also soetwas wie die Möglichkeit in Java einen solchen UAC Prompt zu triggern?

Denn dieses "Möchten sie XYZ zulassen" ist für mich völlig neu.
Damals war ich es gewohnt überall lesen und schreiben zu dürfen.

Diese ganze Nachfragerei ist so nervig - ich kann nicht einmal meine externe Festplatte verwalten, auch wenn ich dem Programm Administratorrechte gebe.
Windows meint, ich sei "Nicht der Besitzer dieses Ordners".

Könnt ihr mir helfen, bzw. vorschlagen was man tun könnte?

Andere Applikationen wie bekannte Spiele zum Beispiel können ja auch ohne extra Aufforderung oder explizitem als "Administrator ausführen" in ihre eigenen Installationsordner schreiben.

Liegt das vielleicht daran, dass die ausführbaren Dateien digital signiert sind?

Gibt es vielleicht einen JVM Parameter zum Holen von Schreibrechten?


Ich kenn' mich überhaupt nicht aus...

Könnt ihr mir helfen?

Mit freundlichen Grüßen,
Martin C.
 
Gibt es also soetwas wie die Möglichkeit in Java einen solchen UAC Prompt zu triggern?
nur mit nativem Code oder Befehlen über Runtime.exec(); , nicht in Java

Denn dieses "Möchten sie XYZ zulassen" ist für mich völlig neu.
Diese Art Zugriffsschutz ist nun mal ein wichtiges Sicherheitsmerkmal - sonst wäre dein Windows noch viel viel sehr viel anfälliger gegen Schadsoftware.

Diese ganze Nachfragerei ist so nervig - ich kann nicht einmal meine externe Festplatte verwalten, auch wenn ich dem Programm Administratorrechte gebe.
Windows meint, ich sei "Nicht der Besitzer dieses Ordners".
Das ist allerdings seltsam... Auf deine externe Festplatte solltest du schon Zugriff haben.

Ich musste leider feststellen, dass alle meine Applikationen nach der Installation so gut wie nutzlos sind, da sie nicht in ihre eigenen Installationsordner schreiben dürfen.
Andere Applikationen wie bekannte Spiele zum Beispiel können ja auch ohne extra Aufforderung oder explizitem als "Administrator ausführen" in ihre eigenen Installationsordner schreiben.
Du solltest auch nie in die Installationsordner von Programmen schreiben. Damit sperrst du alle Nutzer von Unixen (Linux, Mac, BSD, etc.) aus, denn auf diesen Systemen haben die Programme auch nicht das Recht, in ihre Installationsordner zu schreiben. Wenn du Daten schreiben musst, dann in die Anwendungsdaten oder auf den Desktop.

Gibt es vielleicht einen JVM Parameter zum Holen von Schreibrechten?
höchst unwahrscheinlich. Einzige Möglichkeit wäre, dass du (im C-Code oder mit CMD-Befehlen) dir Administratorrechte holst, so wie es unter linux su/sudo und gksu/gksudo gibt.
 
Hallo!

Bitte entschuldigt, dass ich dieses Thema wieder ausgrabe.

In letzter Zeit habe ich mehrere Applikationen namhafter Hersteller (Spiele, etc.) untersucht und habe herausgefunden, dass deren Installer (welcher über die UAC bejaht werden muss) die Ordnerrechte verändern und somit deren Executables nie nach Rechten schreien, da sie diese bereits haben.

Es werden also nicht die Rechte von "Program Files" geerbt - es wird für die Gruppe "ERSTELLER-BESITZER" sowie für die Gruppe "Benutzer" vollzugriff gewährt.

Dieses Verfahren scheint sehr verbreitet zu sein und muss anscheinend für jede Plattform (Win XP, Win Vista/7) extra überlegt werden.

Jetzt kommt meine Frage:

Gibt es in Java die Möglichkeit Ordnerberechtigungen zu ändern?

Wie wird das zum Beispiel beim oft verwendeten C++ gemacht?

Werden die Ordner bereits mit Rechten erstellt, oder diese nachträglich bearbeitet?
 
XP hat keine UAC, siehe https://secure.wikimedia.org/wikipedia/en/wiki/User_Account_Control
Ähnliche Schutzsysteme gibt es bei Linux und anderen Unixen schon seit längerem.
Unter Windows dürfte es schwierig werden, die Ordnerberechtigungen zu ändern – ein Programm hat auch normalerweise nichts im Programmverzeichnis oder den Anwendungsdaten eines anderen Programmes zu verändern.
Solange es nur um den Installer geht, solltest du den Nutzer darum "bitten", deinem Programm Administratorrechte zu geben.
Wie man unter Windows Administratorrechte einfordert, steht hier:
http://en.wikipedia.org/wiki/User_Account_Control#Requesting_elevation
http://technet.microsoft.com/en-us/library/cc709691(WS.10).aspx
http://msdn.microsoft.com/en-us/library/bb756929.aspx

Für viele Unixe und GNU/Linux gibt es die Befehle su/sudo (für die Konsole) sowie gksu/gksudo (graphische Anwendungen)
 
Hm, also bleibt mir wohl nichts anderes übrig als den Code der Applikationen zu überarbeiten.

Auf alle Fälle: Danke für deine Antworten, genodeftest!

mfg,
Martin
 
Hallo, ich stehe ebenfalls vor dem Problem, dass ich ein Programm mit Administratorrechten ausführen muss. Bin bisher aber auf noch nichts nützliches gestoßen, bis auf folgenden zitierten Text:

nur mit nativem Code oder Befehlen über Runtime.exec(); , nicht in Java

Mich interessiert vor allem die Stelle mit dem Runtime.exec(), da ich mein externes Programm sowieso damit starte. Aber wie kannn ich nun den Startbefehl abändern, damit das auszuführende Programm als Administrator gestartet wird? Mein Javaprogramm an sich benötigt keinerlei Adminrechte.

Gruß d4rkY89
 
Super, vielen Dank Thomas :)
Da das Programm möglichst einfach bedienbar sein soll und der Benutzer wahlweise durch eine Checkbox das externe Programm als Admin oder als normaler User starten soll kommt allerdings nur die 1. Variante in Frage.

Hast mir wiedermal sehr weitergeholfen ;)

Gruß d4rkY89
 
Hallo,

Das Problem habe ich inzwischen gelöst.

Ich habe mir eine JNI Dll gebastelt und dadurch das Windows native "ShellExecute" über Java zugänglich gemacht.

Setzt man beim ShellExecute die Art wie das Dokument zu öffnen ist nicht auf den Standard "open", sondern auf "runas" so wird die Datei (sofern sie eine ausführbare Datei ist) nach Bestätigung des Users als Administrator ausgeführt.

Ein Vorteil ist, dass der Aufruf dieser Methode einen externen Prozess erzeugt, und keinen Childprocess wie Runtime.exec().

Das Ganze ist meiner Meinung nach zuverlässiger als der Aufruf von cmd.exe /c.


mfg,
Martin C
 
@mccae:
Der Vorteil der Variante mit cmd.exe ist, dass er bei Fehlern nur Exceptions wirft oder ggf. einfach nur nicht das ausführt, was du willst.
Die Variante über JNI kann bei Fehlern im C-Code (die werden ganz sicher in den Windows-DLLs auftreten) dein Programm zum Absturz bringt. Das ist also riskanter.
 
Zurück