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?

War es hilfreich?

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"
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top