В моем приложении есть функция обновления - она загружает и проверяет установщик (setup.exe, созданный с помощью NSIS). Чтобы действительно запустить обновление, я просто делал:
QString path = .. absolute path to the downloaded file ...
QProcess::startDetached(path, QStringList());
Это нормально работает на XP - но на Vista и Win7 ничего не происходит после завершения загрузки. Если я просматриваю загруженное обновление и запускаю его вручную, оно работает нормально. Я предполагаю, что происходит то, что UAC блокирует установщик во время CreateProcess, но на этом мои знания заканчиваются.
Дополнительные сложности - когда я запускаю отладочную сборку из командной строки, описанные выше шаги работают - я получаю приглашение UAC и могу запустить установщик. Это релизные сборки, запускаемые из меню / ярлыка «Пуск», в которых есть проблема - я предполагаю, что есть разница в токене аутентификации при запуске из командной оболочки.