从Qt应用程序执行MSI文件
Executing a MSI file from a Qt application
我写了一个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应用程序的默认执行应该是什么。这是我建议不要这样做的,因为您的应用程序可能会在系统中引入安全漏洞,您可能需要对此负责。
相关文章:
- .cpp和.h文件中的模板专用化声明
- 为什么两个不同的未命名名称空间可以共存于一个cpp文件中
- 文本文件中的单词链表
- CMake-按正确顺序将项目与C运行时对象文件链接
- 使用新行和不使用新行读取文件
- 在C++程序中输入的文本文件将不起作用,除非文本被复制和粘贴
- 挂起和取消挂起一个文件DLL
- 如何确定我已使用非编码文件到达 EOF?
- 命名空间中具有.h和.cpp文件的类
- 如何使用ndk-build.cmd构建Android.so文件
- 从包含m行的文件中提取n行,必要时(惰性地)重复该文件
- 读取文件并输入到矢量中
- 在C++中查找文件
- c++库的公共头文件中应该包含什么
- 用c++从输入文件中读取另一行
- Cppcheck生成xml转储文件
- 从Qt应用程序执行MSI文件
- 使用MSI文件的安装程序窗口带有多语言Drop Dawn
- MSI 文件命令行参数解析
- 文件夹中的Windows应用商店部署文件,而不是MSI