Ho una funzione di aggiornamento nella mia app - scarica e verifica il programma di installazione (un setup.exe, creato con NSIS). Per dare il via in realtà l'aggiornamento, sono stato semplicemente facendo:QProcess :: startDetached bloccato da UAC (eseguendo un programma di aggiornamento)
QString path = .. absolute path to the downloaded file ...
QProcess::startDetached(path, QStringList());
Questo funziona bene su XP - ma su Vista e Win7, non succede nulla, una volta completato il download. Se sfoglio l'aggiornamento scaricato ed eseguo manualmente, funziona perfettamente. Presumo che ciò che sta accadendo è che UAC sta bloccando l'installer al momento di CreateProcess, ma questo è il posto dove finiscono le mie conoscenze.
Complicazione aggiuntiva: quando eseguo una build di debug dalla riga di comando, i passaggi sopra funzionano - Ottengo il prompt UAC e posso eseguire il programma di installazione. Sono le versioni di rilascio, avviate dal menu di avvio/collegamento, che hanno il problema - presumo ci sia una differenza nel token di autenticazione quando si esegue da una shell di comando.
Utilizzando il verbo runas sarà _force_ UAC elevazione, se non si specifica un verbo ShellExecute lo capirà da solo ... – Anders
Corretto, grazie per le informazioni extra. – ismail