从Qt应用程序执行MSI文件

Executing a MSI file from a Qt application

本文关键字:MSI 文件 执行 应用程序 Qt      更新时间:2023-10-16

我写了一个Qt应用程序,可以下载然后执行MSI文件。执行是通过QProcess完成的,并使用此问题中提供的信息。

每当我使用QProcess运行它时,都会抛出异常:

引发异常:读取访问冲突

这似乎是一个权限管理问题。但是我不知道问题到底在哪里以及如何解决它。下面是一个示例代码片段:

QProcess *process = new QProcess(this);
QString program = "file.msi";
QString folder = "C:\Users\user\Downloads\";
process->start(program, QStringList() << folder);

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

有两种选择:

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

此外,您可以使用管理员权限运行Qt应用程序。为了节省用户手动执行的卢布,您可以使用它来告诉WindowsQt应用程序的默认执行应该是什么。这是我建议不要这样做的,因为您的应用程序可能会在系统中引入安全漏洞,您可能需要对此负责。