问题背景
新项目有个功能点,对电脑硬件进行检查,恰好公司已经有一个检测硬件的MFC工具了,新工具是QT开发;为了节省开发成本,我们就选择直接用新项目拉老工具执行检查功能
出问题的解决方法
- **QProcess的start(exePath:参数为exe的绝对路径)**方法拉已有工具
- 使用**waitForFinished(-1)**来等待工具关闭
出现问题
- 假定我们exe名为 tool.exe
- 当exePath参数为D:/tool/tool.exe 或其他不含空格目录时,没有任何问题,均可拉起来
- 当exePath参数为D:/tool bb/tool.exe目录时,也可以拉起
- 当exePath参数为C:/Program files/tool.exe目录时,无法拉起
尝试解决
- 网上查到的方法前后增加 *\**发现无效依旧无法拉动
- 修改为相对路径,这个tool.exe相对于我们主程序路径为"./tool/tool.exe" 或者 “.\tool\tool.exe”,也无法拉动
- 最终发现修改路径为 tool\tool.exe时,成功解决
成功总结
成功的原因是因为我们当前工作目录为exe所在路径,QProcess的start参数需要相对于工作目录。我们可以通过QDir::setCurrent(workingDir) 可以设置当前工作目录到需要拉动的exe所在目录,拉起后再重新设置回去即可。