El aviso de elevación aparece cuando su aplicación lo solicita, por alguna razón. Puedes controlarlo con el manifiesto de la aplicación. Consulte el artículo Create and Embed an Application Manifest (UAC) para obtener detalles sobre cómo agregar el manifiesto.
Yo te sugeriría lo siguiente:
- separar su Updater y Update Checker, por lo que están en diferentes archivos .EXE.
- UpdateChecker.exe no requiere privilegios de administrador y, por lo tanto, el elemento
requestedExecutionLevel
del manifiesto tiene el nivel asInvoker
.
- Updater.exe requiere privilegios de administrador porque escribe el archivo de la aplicación actualizada en Archivos de programa. Por lo tanto, el elemento
requestedExecutionLevel
de su manifiesto tiene el nivel requireAdministrator
.
En su programa puede ejecutar UpdateChecker.exe de la manera que desee. Para iniciar Updater.exe, deberá usar ShellExecute
; si la aplicación tiene el manifiesto (y recomiendo encarecidamente que se incorpore el manifiesto) mostrará el mensaje de UAC para elevación si la aplicación desea privilegios de administrador. No es necesario usar el verbo runas
.
Como alternativa, puede verificar si la actualización está disponible o no desde su aplicación principal. Y ejecute Updater.exe solo cuando haya una nueva versión en el servidor.
Otra opción sería hacer Updater.exe el registro de entrada para la actualización y aplicarlo si hay uno, al igual que lo hace ahora. En este caso, Updater.exe debería tener el nivel asInvoker
en su manifiesto. Cuando se inicia, sin los parámetros, comprueba si hay una nueva versión en el servidor.Si encuentra una versión más nueva, se vuelve a lanzar a sí mismo con privilegios de administrador y pasa un parámetro de línea de comandos, por ejemplo /doUpdate
, que le indica que realice la actualización real.
Con el fin de relanzar sí elevada, se tiene que utilizar ShellExecute
función y runas
verbo, porque ShellExecute
será incapaz de detectar automáticamente su Updater.exe ahora requiere privilegios administrativos.
Tenga en cuenta que el significado del verbo runas
difiere entre Windows XP y Windows Vista/7, por lo que debe manejar esta situación si desea admitir versiones anteriores de Windows. El primer enfoque que describí funcionará en Windows XP sin manejo adicional.
Esto es más o menos lo que dije. –
Me gusta esta respuesta mejor. Menos conversación, más código. –