Application: gvSIG desktop - gvSIG bugs #2807: No se pueden instalar complementos si gvSIG no se ejecuta como administrador

Cesar Martinez Izquierdo
2014-09-10T04:50:45Z

Hola Cèsar, muy interesante el link que envías. Las conclusion más importante es que la elevación de privilegios se ha de hacer forzosamente desde código nativo (usando ShellExecute). Es decir, añadir el Manifest al .exe y lanzarlo directamente desde Java falla con un error "CreateProcess error=740, La operación solicitada requiere elevación" (aunque sí funcione haciendo doble click desde el Explorador de ficheros).

Por otra parte, he visto que si un ejecutable se renombra a setup.exe automáticamente abre el diálogo UAC sin necesidad siquiera de crear un manifest. Eso sí, igual que en el caso anterior, sólo funciona al lanzar desde código nativo o al hacer doble click.

Juntando todo esto, he hecho una prueba muy sencilla con la librerías JNA/JNA Platform que permiten ejecutar código nativo sin crear JNIs. He renombrado el instalador de gvSIG a "setup.exe" y lo he lanzado desde Java con el siguiente código:

package test;
import com.sun.jna.platform.win32.Shell32;
public class TestShell32 {
public static void main(String[] args) {
Shell32 shell = Shell32.INSTANCE;
shell.ShellExecute(null, "open", "D:\\Users\\c_martinez\\Downloads\\setup.exe", "", "D:\\Users\\c_martinez\\Downloads", 5);
}
}

Y... ¡bingo¡ Se abre el UAC automáticamente. Esto lo podríamos aplicar bastante fácilmente si incluimos el gestor de complementos como ejecutable.

Todo esto me interesa también por otro lado, ya que estoy preparando una extensión que añade una página de preferencias para configurar la memoria de gvSIG, y en Windows hay el mismo problema (el fichero de configuración sólo puede escribirse por el administrador).