2010-12-24 12 views
5

Tengo una función de actualización en mi aplicación: descarga y verifica el instalador (un setup.exe, creado con NSIS). Para poner en realidad fuera de la actualización, he sido simplemente haciendo:QProcess :: startDetached bloqueado por UAC (ejecuta un actualizador)

QString path = .. absolute path to the downloaded file ... 
QProcess::startDetached(path, QStringList()); 

Esto funciona bien en XP - pero en Vista y Win7, nada sucede una vez que se complete la descarga. Si busco la actualización descargada y la ejecuto manualmente, funciona bien. Supongo que lo que está sucediendo es que UAC está bloqueando el instalador en CreateProcess time, pero aquí es donde se me acaba el conocimiento.

Complicación adicional: cuando ejecuto una compilación de depuración desde la línea de comandos, los pasos anteriores funcionan, recibo el aviso de UAC y puedo ejecutar el instalador. Son las compilaciones de lanzamiento, iniciadas desde el menú de inicio/acceso directo, que tienen el problema: supongo que hay una diferencia en el token de autenticación cuando se ejecuta desde un shell de comandos.

Respuesta

3

Si no es administrador y llama a CreateProcess() en un .exe con un manifiesto "Vista" (o sin manifiesto, pero un .exe que Windows detecta como instalador (Esto incluye NSIS)) la llamada falla, necesita usar ShellExecute[Ex](). ShellExecute se disparará UAC, si es necesario ...

1

Esto parece ser un error de Qt, ver QTBUG-9761, la solución correcta es utilizar ShellExecute con lpOperation conjunto de runas.

+0

El uso del verbo runas se _force_ elevación de UAC, si no se especifica un verbo , ShellExecute lo resolverá solo ... – Anders

+0

Correcto, gracias por la información adicional. – ismail

7

También puede utilizar

QDesktopServices::openUrl(QUrl::fromLocalFile(path)); 

podría ser sorprendente y contrario a la intuición, pero funciona y es más multiplataforma

+0

Impresionante solución. Esto realmente llama a ShellExecute en segundo plano. El único problema que veo es que no lleva la ventana de UAC a la parte superior –

Cuestiones relacionadas