2017-08-14 207 views
0

我编写了一个Qt应用程序,用于下载并执行MSI文件。执行通过QProcess完成,并使用this question中提供的信息。从Qt应用程序执行MSI文件

每当我使用它的QProcess抛出异常运行:

抛出异常:读取访问冲突

这似乎是一个权限管理的问题。但是我不知道问题的确切位置以及如何解决问题。以下是一个示例代码片段:

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

显示您正在使用的代码的简要示例。我们无法解决我们无法看到的代码中的错误。 – drescherjm

+0

我已经给出了一个链接,完全如图所示。 – Cherple

+0

使用QProcess不应该有这个问题。您的代码中可能存在一个错误或dll冲突。如果我们无法复制,我们也无法帮忙。我可以向你保证,我在我的几个应用程序中使用QProcess,但他们都没有这样做。 – drescherjm

回答

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应用程序的默认执行应该是什么。反对,因为你的申请可能会在系统中引入安全漏洞,你可以承担责任。

+0

谢谢,这解决了这个问题。 – Cherple