2008-11-03 11 views
8

Wenn ich versuche, eine neue Task im Taskplaner über die Java ProcessBuilder-Klasse zu erstellen, erhalte ich einen Windows Vista-Zugriff verweigert. Auf XP funktioniert es gut.Administratoranfragen für Java-App unter Windows Vista anfordern

Als ich den „Ausführen als Administrator“ Option verwenden es auch auf Vista läuft ..

Dies ist jedoch ein zusätzlicher Schritt eine die Benutzer erneut abgefragt nicht darüber Bescheid wissen könnte. Wenn der Benutzer nur auf das App-Symbol doppelklickt, wird der Zugriff verweigert. Meine Frage ist, wie kann ich eine Java-App erzwingen, Admin-Privilegien direkt nach dem Start zu erhalten?

Antwort

3

Ich bin mir nicht sicher, ob Sie es programmgesteuert tun können.

Pfad:: Wenn Sie ein Installationsprogramm für Ihre Anwendung haben, können Sie den Registrierungsschlüssel zu erzwingen Lauf als Administrator hinzufügen HKEY_CURRENT_USER \ Software \ Microsoft \ Windows NT \ Currentversion \ AppCompatFlags \ Schichten

Key : RunAsAdmin

Typ: REG_SZ

< Vollständiger Pfad zur eXE >>

Wert

+11

Ich bin mir nicht sicher, ich würde diese Flagge auf 'javaw.exe' setzen! – finnw

0

Ich habe noch nicht die beste Lösung gefunden. Aber ich habe eine Alternative zu "James Van Huis". Verwenden Sie stattdessen RUNASINVOKE, damit Sie nicht jedes Mal, wenn Sie die App ausführen, die Eingabeaufforderung Zulassen/Ablehnen sehen müssen.

Hinweis: Sie immer Admin sein müssen, dass das, was ich

22

Haben Sie Ihre Java-Anwendung in Betracht gezogen zu lösen versuchen mit launch4j in einem Exe-Verpackung? Auf diese Weise können Sie eine Manifestdatei einbetten, mit der Sie die Ausführungsstufe für Ihre ausführbare Datei festlegen können. Mit anderen Worten, Sie steuern die Berechtigungen, die Ihrer laufenden Anwendung gewährt werden sollten, und weisen das Betriebssystem effektiv an "Als Administrator ausführen", ohne dass der Benutzer dies manuell tun muss.

Zum Beispiel ...

build.xml:

<target name="wrapMyApp" depends="myapp.jar"> 
     <launch4j configFile="myappConfig.xml" /> 
</target> 

myappConfig.xml:

<launch4jConfig> 
    <dontWrapJar>false</dontWrapJar> 
    <headerType>gui</headerType> 
    <jar>bin\myapp.jar</jar> 
    <outfile>bin\myapp.exe</outfile> 
    <priority>normal</priority> 
    <downloadUrl>http://java.com/download</downloadUrl> 
    <customProcName>true</customProcName> 
    <stayAlive>false</stayAlive> 
    <manifest>myapp.manifest</manifest> 
    <jre> 
    <path></path> 
    <minVersion>1.5.0</minVersion> 
    <maxVersion></maxVersion> 
    <jdkPreference>preferJre</jdkPreference> 
    </jre> 
</launch4jConfig> 

myapp.manifest:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> 
    <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3"> 
     <security> 
      <requestedPrivileges> 
      <requestedExecutionLevel level="highestAvailable" 
       uiAccess="False" /> 
     </requestedPrivileges> 
    </security> 
    </trustInfo> 
</assembly> 

Siehe http://msdn.microsoft.com/en-us/library/bb756929.aspx und die starten 4j Website für Details zum Modus.

1

Obwohl die Antwort von FreeCouch gut ist, aber ich einige Probleme hatte und dachte, es hier zu setzen, damit andere das nächste Mal leicht profitieren können.

Um Administrator-Berechtigung in Java zu bekommen, so weit ich die Lösung gefunden habe, ist das * .jar innerhalb einer * .exe mit Programm wie Launch4J zu verpacken und Manifest damit zu binden.

Um eine Manifest-Datei zu erstellen, Öffnen Sie einen beliebigen Texteditor wie Notepad und fügen Sie diese Zeilen ein und speichern Sie sie mit dem Dateinamen zusammen mit der Erweiterung für beispielsweise: myApplication.exe.manifest

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> 
    <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3"> 
     <security> 
      <requestedPrivileges> 
       <requestedExecutionLevel level="highestAvailable" uiAccess="False" /> 
      </requestedPrivileges> 
     </security> 
    </trustInfo> 
</assembly> 

In launch4j, auf Basic Registerkarte diese Datei in Wrapper Manifest Option hinzufügen.