我的应用程序中有一个更新功能 - 它会下载并验证安装程序(一个使用NSIS创建的setup.exe文件)。为了实际启动更新,我一直在做的是:
QString path = .. absolute path to the downloaded file ...
QProcess::startDetached(path, QStringList());
在XP上这个工作正常 - 但在Vista和Win7上,一旦下载完成就什么也不会发生。如果我浏览到已下载的更新并手动运行它,则可以正常工作。我认为发生的情况是UAC在CreateProcess时阻止了安装程序,但这就是我的知识枯竭的地方。
额外的复杂性 - 当我从命令行运行调试版本时,上述步骤有效 - 我得到了UAC提示并可以运行安装程序。启动菜单/快捷方式中的发布版本存在问题 - 我认为在从命令行运行时存在授权令牌的差异。