Anfrage Administratorrechte für Java-Anwendung auf Windows Vista
-
06-07-2019 - |
Frage
Wenn ich versuche, eine neue Aufgabe in der Task-Scheduler über die Java Process Klasse zu erstellen, bekomme ich einen Zugriff verweigert Fehler ein Windows Vista. Unter XP funktioniert es gut.
Wenn ich die „Ausführen als Administrator“ Option auf Vista läuft auch ..
Dies ist jedoch ein zusätzlicher Schritt ein die Benutzer möglicherweise nicht wissen, über diese erneut abgefragt. Wenn der Benutzer einfach doppelt klickt auf dem App-Symbol wird es scheitern mit Zugriff verweigert. Meine Frage ist, wie kann ich eine Java-Anwendung zwingen, Admin-Rechte auf reuest direkt nach dem Start?
Lösung
Ich bin mir nicht sicher, dass Sie es programmatisch tun können. Wenn Sie ein Installationsprogramm für Ihre Anwendung haben, können Sie den Registrierungsschlüssel zu erzwingen Lauf als Administrator hinzufügen:
Pfad: HKEY_CURRENT_USER \ Software \ Microsoft \ Windows NT \ Currentversion \ AppCompatFlags \ Schichten
Key: << Vollständiger Pfad zur EXE >>
Wert: RunAsAdmin
Typ: REG_SZ
Andere Tipps
Haben Sie darüber nachgedacht Ihre Java-Anwendung in einer Exe-Einwickeln launch4j mit? Auf diese Weise können Sie eine Manifest-Datei einbetten, dass Sie die „Ausführungsebene“ für die ausführbare Datei angeben können. Mit anderen Worten, steuern Sie die Berechtigungen, die für Ihre laufende Anwendung gewährt werden sollen, effektiv das O zu sagen auf „Ausführen als Administrator“ ohne dass der Benutzer manuell tun.
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 launch4j Website für Modus Details.
Obwohl FreeCouch Antwort ist gut, aber ich konfrontiert ein Problem und dachte es hier so beim nächsten Mal andere setzen kann leicht profitiert werden.
Administrator Berechtigung in Java zu sehen, wie weit ich die Lösung gefunden ist, die * .jar in einem * .exe mit Programm wie launch4j und Bindung Manifest mit ihm zu wickeln.
Um eine Manifest-Datei zu erstellen, öffnen Sie einen Texteditor wie Notepad und diese Zeilen in sie einfügen und mit dem Dateinamen speichern zusammen mit seiner Erweiterung für zB: 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 hinzufügen diese Datei in Wrapper Manifest Option.
Ich habe nicht die beste Lösung noch nicht gefunden. Aber ich habe eine Alternative Work-around zu "James Van Huis" zu vergleichen. Verwenden Sie RUNASINVOKE statt, so dass Sie müssen nicht die Aufforderung Zulassen / Verweigern jedes Mal wenn Sie ausführen, um die App.
Hinweis: Sie immer Admin sein müssen, dass das, was ich zu lösen versuchen
Mit der launch4j Gradle Plugin
Besonders, wenn bereits Gradle verwenden, ist es einfach, die launch4j Plugin anzuwenden, dies zu beheben .
Wie in freecouch‘Antwort , erstellen Sie eine Datei myapp.manifest
mit
<?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>
dann das Gradle Plugin anwenden, indem zu Ihrem build.gradle
plugins {
id 'java'
id 'edu.sc.seis.launch4j' version '2.4.3'
}
launch4j {
mainClassName = 'com.mypackage.MainClass'
icon = "$projectDir/icons/icon.ico"
manifest = "$projectDir/myapp.manifest"
}
oder, bei Verwendung von Kotlin Gradle DSL, auf Ihre build.gradle.kts
:
plugins {
application
kotlin("jvm") version "1.2.31"
java
id("edu.sc.seis.launch4j") version "2.4.3"
}
launch4j {
mainClassName = "com.mypackage.MainKt"
icon = "$projectDir/icons/icon.ico"
manifest = "$projectDir/myapp.manifest"
}