2009-11-12 18 views
10

Desde hace un tiempo el instalador de mi programa ha utilizado el siguiente código para hacer que mi aplicación se ejecute con privilegios de administrador. Pero parece no tener ningún efecto en Windows 7. En Vista funcionó maravillosamente. Si hago clic derecho en el acceso directo y digo que se ejecute como Administrar, el programa comenzará bien. Pero al usar el siguiente código, debe hacerse para ejecutar el programa de esa manera todo el tiempo. Ya no. ¿Alguien sabe si Win 7 aún usa esta clave? UAC también está en camino por cierto.RUNASADMIN en el Registro no parece funcionar en Windows 7

Registry.SetValue(@"HKEY_CURRENT_USER\Software\Microsoft\Windows NT\ 
CurrentVersion\AppCompatFlags\Layers", "C:\App\app.exe", "RUNASADMIN"); 

Gracias.

Respuesta

6

Estoy usando Windows 7 y puedo ver tales claves. Sin embargo, no creo que sea una forma adecuada de configurar su aplicación e instalador.

Mi recomendación es que distribuya un archivo de manifiesto junto con su aplicación (app.exe). El archivo de manifiesto puede incluso incluirse en el ejecutable fácilmente si está utilizando Visual Studio 2008. Luego, en el archivo de manifiesto puede requerir derechos de administrador.

http://msdn.microsoft.com/en-us/library/bb756929.aspx

http://blogs.msdn.com/shawnfa/archive/2006/04/06/568563.aspx

http://channel9.msdn.com/posts/jmazner/How-To-Tell-Vistas-UAC-What-Privelege-Level-Your-App-Requires/

+0

Gracias lextm. No sabía que se podría crear un archivo manifiesto para los archivos exe que no creé. O que tampoco tenían que estar incrustados. Gracias por los enlaces. – JimDel

+0

@JimDel: todos esos enlaces parecen estar relacionados con la incorporación del manifiesto. ¿Dónde viste cómo lo haría "para los archivos ejecutables que no creé?" – Pete

1

en win7, RUNASADMIN se coloca en CLAVE: cuando HKLM\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\AppCompatFlags\\Layers usando instalar escudo 5.1, los valores se copian en el Falis actualy appcpmctflgsin wow6432node y exe para funcionar como administración.

+0

y cómo solucionarlo ?! –

1

This answer by RobeN funciona "para un archivo exe que no creé", que expresaste como un interés en tu comentario en Lex Li's answer. Utiliza su idea de registro original.

Dos diferencias posiblemente pertinentes:

  1. Con un sistema operativo de 32 bits, no necesita preocuparse por la Wow6432Node (a concern mentioned by "uss")
  2. Mediante el uso de HKLM en lugar de HKCU, no necesita preocuparse acerca de qué usuario está ejecutando la aplicación (a concern mentioned by Leo).
8

Tengo una respuesta/solución para esta pregunta.

En primer lugar, no estoy de acuerdo (respetuosamente) con el comentario de que el uso de AppCompatFlags no es una "forma adecuada de configurar la aplicación y el instalador". La modificación de esta sección del registro simplemente se refleja utilizando la GUI de Windows para cambiar el nivel de privilegio del ejecutable. Encuentro que este método es más fácil de implementar que agregar un archivo de manifiesto. Si el usuario quiere o necesita cambiar el nivel de privilegio para no ejecutar como administrador, puede hacerlo fácilmente con la GUI.

De todos modos, tuve el mismo problema de tratar de establecer el Nivel de privilegio del ejecutable en Ejecutar como administrador. Sabemos que podemos configurarlo con la GUI:

  • Haga clic con el botón derecho en el acceso directo o.archivo EXE y seleccione Propiedades
  • Haga clic en la pestaña Compatibilidad
  • (En este punto se puede ajustar el nivel de privilegios sólo para usted o para todos los usuarios, prefiero hacerlo para todos los usuarios)
  • Haga clic en el botón Cambiar configuración para todos los usuarios
  • Se abre una nueva ventana de Propiedades con una pestaña titulada "Compatibilidad para todos los usuarios"
  • Ver nivel de privilegio bajo "Ejecutar este programa como administrador", hacer clic en Aceptar un par de veces para guardar los cambios .

Cuando se guardan los cambios, se encuentra la configuración en el registro:

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers] 
"C:\\Program Files (x86)\\My Program\\My Program.exe"="RUNASADMIN" 

Cuando me puse la .exe para funcionar como administrador utilizando la interfaz gráfica de usuario de esta manera, que siempre funciona.

Sin embargo, cada vez que trataba de cambiar el registro directamente sin pasar a través de la interfaz gráfica de usuario, el programa simplemente no va a ejecutar como administrador. El registro muestra que hice el cambio y cuando miro el Nivel de privilegio para el ejecutable, Ejecutar como administrador está marcado como activado.

He intentado varias maneras diferentes de hacer el .exe ejecutar como administrador con sólo cambiar el registro:

  • manual editado el registro con regedit
  • importados los cambios de un archivo .reg
  • Se utiliza el herramienta de línea de comando reg.exe para cambiar el registro
  • Se utilizó la herramienta Wise Script ahora desaparecida
  • Usado AutoIT Scripting

Todos estos métodos hicieron lo mismo. Se modificó el registro y la GUI mostró que ese programa debe ejecutarse como administrador, pero el programa nunca se ejecuta como administrador.

La solución para este problema que encontré es seguir adelante y cambiar la clave HKCU y la clave HKLM con la configuración.

[HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers] 
"C:\\Program Files (x86)\\My Program\\My Program.exe"="RUNASADMIN" 

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers] 
"C:\\Program Files (x86)\\My Program\\My Program.exe"="RUNASADMIN" 

Si cambia estas dos secciones del registro, entonces el .exe se ejecutará como un administrador. Más importante aún, si un usuario diferente inicia sesión en la PC, el programa se ejecutará como administrador. Esto a pesar del cambio de registro que no se realiza la sección HKCU para el usuario posterior.

No sé lo que está pasando aquí, pero se está trabajando.

1

que utilizan CMD para añadir esta entrada en el Registro usando los siguientes comandos:

reg ADD "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers" /t REG_SZ /f /v "C:\Program Files (x86)\MyApp\myapp.exe" /d RUNASADMIN 

Esto funciona bien en Win8Pro-32 bits, pero no funciona en la versión de 64 bits!
He encontrado que la ejecución de este comando en un 64 bits de victorias (corre a través de un instalador de 32 bits como etapa final de instalación), hace que la creación de la entrada en HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers!
Después de algunas investigaciones (gracias a mi amigo el Sr. H.Toosi), encontramos la solución correcta.
SOLO AÑADIR /reg:64 AT final del comando anteriores como este:

reg ADD "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers" /t REG_SZ /f /v "C:\Program Files (x86)\MyApp\myapp.exe" /d RUNASADMIN /reg:64 

y todo es normal en ambos sistemas operativos 32 y 64 bits (Win 7 32bit, Win 8 de 32 bits, Win 8.1 64 bits).

Cuestiones relacionadas