我编写了一个下载然后执行MSI文件的Qt应用程序。执行是通过QProcess
完成的,并使用this question中提供的信息。
每当我使用QProcess
运行它时,都会抛出异常:
抛出异常:读取访问冲突
这似乎是权利管理问题。但是,我不知道问题的确切位置以及如何解决问题。以下是一个示例代码段:
QProcess *process = new QProcess(this);
QString program = "file.msi";
QString folder = "C:\\Users\\user\\Downloads\\";
process->start(program, QStringList() << folder);
答案 0 :(得分:1)
问题来自于MSI文件是安装文件,因此需要管理员权限。
有两种选择:
QDesktopServices::openUrl(QUrl("file:///<path to your MSI file>"), QUrl::TolerantMode));
(建议使用here),而不是使用QProcess
。runas
通过调用QProcess::startDetached("runas /user:<localmachinename>\user msiFileName");
来替换相应的字符串(您应该检查documentation of runas
,因为这与Qt无关,但与runas
的命令行参数。此外,您还可以使用管理员权限运行Qt应用程序。为了向用户保存手动执行的卢布,您可以使用this告诉Windows Qt应用程序的默认执行应该是什么。我建议不要这样做,因为您的申请可能会在系统中引入您可能要承担责任的安全漏洞。