2008-11-03 19 views
8

Cuando intento crear una nueva tarea en el programador de tareas a través de la clase Java ProcessBuilder obtengo un error de acceso denegado en Windows Vista. En XP funciona bien.Solicitud de privilegios de administrador para la aplicación Java en Windows Vista

Cuando utilizo la opción "Ejecutar como administrador" que se ejecuta en Vista, así ..

Sin embargo, este es un paso adicional vuelve a consultar un los usuarios podrían no saber acerca de esto. Cuando el usuario simplemente hace doble clic en el ícono de la aplicación, fallará con acceso denegado. Mi pregunta es ¿cómo puedo forzar a una aplicación java a solicitar privilegios de administrador justo después del inicio?

Respuesta

3

No estoy seguro de poder hacerlo programáticamente. Si usted tiene un instalador para su aplicación, se puede agregar la clave del registro para forzar Ejecutar como administrador:

Path: HKEY_CURRENT_USER \ Software \ Microsoft \ Windows NT \ CurrentVersion \ AppCompatFlags \ capas

Clave : < < ruta completa a exe >>

Valor: RunAsAdmin

Tipo: REG_SZ

+11

¡No estoy seguro de que quiera establecer esa bandera en 'javaw.exe'! – finnw

0

No he encontrado la mejor solución. Pero tengo una solución alternativa en comparación con "James Van Huis". Use RUNASINVOKE en su lugar para no tener que ver el mensaje Permitir/Denegar cada vez que ejecuta la aplicación.

Nota: siempre hay que ser administrador, que lo que estoy tratando de resolver

22

¿Ha considerado envolver la aplicación Java en un archivo .exe utilizando launch4j? Al hacer esto, puede incrustar un archivo de manifiesto que le permite especificar el "nivel de ejecución" para su ejecutable. En otras palabras, usted controla los privilegios que se le deben otorgar a su aplicación en ejecución, lo que le dice al sistema operativo que se "ejecute como administrador" sin requerir que el usuario lo haga manualmente.

Por ejemplo ...

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> 

Ver http://msdn.microsoft.com/en-us/library/bb756929.aspx y la lanzamiento 4j sitio web para detalles del modo.

1

Aunque la respuesta de FreeCouch es buena, pero tuve un problema y pensé en ponerlo aquí para que la próxima vez se puedan beneficiar fácilmente.

Para obtener el Permiso de administrador en Java, por lo que he encontrado, la solución es ajustar el * .jar dentro de un * .exe con un programa como Launch4J y el Manifiesto vinculante con él.

Para crear un archivo Manifiesto, abra cualquier editor de texto como el Bloc de notas y pegue estas líneas en él y guárdelo con el nombre del archivo junto con su extensión para, por ejemplo: myApplication.exe.manifiesta

<?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> 

En Launch4J, en Basic pestaña añadir el fichero de opciones Envoltura manifiesto en.

Cuestiones relacionadas