Tam*_*lei 7 qt uac shellexecute
我想调用更新程序来检查更新(不是实际进行更新,而只检查是否有更新).我想在后台默默地做这件事.如果有更新,我会要求用户提升权限并运行更新程序.检查涉及读取应用程序目录中的文件,并将其中找到的版本与网站上的版本进行比较.
如何在没有高程的情况下运行它只进行检查?QProcess::start()失败,因为它需要提升权限,ShellExecute只有在我添加"runas"动词时才会出现相同的原因(我只想在那个目录中实际写入,即我想要执行更新).我猜我需要添加某种清单,但我不知道它的内容.
Tam*_*lei 10
事实证明,我有另一个错误导致非升级运行分支在所有情况下运行.我在帖子中描述的模型有效.要避免Windows推断需要提升权限,您需要添加清单资源.(例如,如果应用程序exe的名称包含单词"updater",则会触发)
清单的内容如下:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
<security>
<requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">
<requestedExecutionLevel level="asInvoker" uiAccess="false" />
</requestedPrivileges>
</security>
</trustInfo>
</assembly>
Run Code Online (Sandbox Code Playgroud)
将它编译为.exe取决于你的编译器和环境,所以我只展示我的:Qt Creator和mingw-gcc:
使用以下内容为资源创建rc文件:
1 24 DISCARDABLE manifest.xml
Run Code Online (Sandbox Code Playgroud)
将此rc文件添加到.pro中,如下所示:
win32:RC_FILE = resources.rc
Run Code Online (Sandbox Code Playgroud)
在此之后,没有动词参数的ShellExecute将在没有提升的情况下运行,并且使用"runas"将以高程运行它.