从Qt应用程序

时间:2017-08-14 13:42:34

标签: c++ qt msiexec

我编写了一个下载然后执行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);

1 个答案:

答案 0 :(得分:1)

问题来自于MSI文件是安装文件,因此需要管理员权限。

有两种选择:

  • 尝试使用QDesktopServices::openUrl(QUrl("file:///<path to your MSI file>"), QUrl::TolerantMode));(建议使用here),而不是使用QProcess
  • 使用Windows runas通过调用QProcess::startDetached("runas /user:<localmachinename>\user msiFileName");来替换相应的字符串(您应该检查documentation of runas,因为这与Qt无关,但与runas的命令行参数。

此外,您还可以使用管理员权限运行Qt应用程序。为了向用户保存手动执行的卢布,您可以使用this告诉Windows Qt应用程序的默认执行应该是什么。我建议不要这样做,因为您的申请可能会在系统中引入您可能要承担责任的安全漏洞。