• 6208阅读
  • 9回复

[讨论]QProcess怎么调用路径含空格的环境变量中的外部程序 [复制链接]

上一主题 下一主题
离线qqlinx
 

只看楼主 倒序阅读 楼主  发表于: 2018-04-19
开发环境VS2013+MinGW
安装MinGW到C:\Program Files\MinGW下,然后把bin加入到环境变量。
QProcess start调用gcc, 启动失败
如果把MinGW安装到C:\MinGW下,就可以正常启动。
现在问题应该就是QProcess先在环境变量找到gcc路径,然后启动gcc,
但是路径含有空格,导致start fail。
请问这种情况怎么解决?
离线qqlinx

只看该作者 1楼 发表于: 2018-04-19
我只是用MinGW举例,实际情况MinGW安装时不含空格。但是有些程序,客户可能会安装到C:\Programe Files或D:\Program Files, 都有空格。
离线fox123

只看该作者 2楼 发表于: 2018-04-20
将被调用软件的全路径作为第一个参数传给QProcess就可以了
2条评分金钱+1威望+1
qqlinx 威望 +1 - 2018-04-22
qqlinx 金钱 +1 - 2018-04-22
离线cahwxy

只看该作者 3楼 发表于: 2018-04-20
Qt对中文路径以及空格处理都有问题,最好的办法是避开这个

Qt以及C++入门和进阶经验、技术分享在线交流会。
https://www.zhihu.com/lives/967361544187772928
欢迎加入讨论!
离线dbzhang800

只看该作者 4楼 发表于: 2018-04-20
回 cahwxy 的帖子
cahwxy:Qt对中文路径以及空格处理都有问题,最好的办法是避开这个
Qt以及C++入门和进阶经验、技术分享在线交流会。
https://www.zhihu.com/lives/967361544187772928
欢迎加入讨论! (2018-04-20 09:11) 

Qt对中文处理没有任何问题,

顶多是C++标准unicode支持比较晚,VS系列C++编译器在VS2015Update2 之前,对Utf-8支持不太友好,仅此而已
离线qqlinx

只看该作者 5楼 发表于: 2018-04-21
回 fox123 的帖子
fox123:将被调用软件的全路径作为第一个参数传给QProcess就可以了 (2018-04-20 08:33) 

这个方法我试过,是可以。不过不知道安装路径,代码没法把全路径写死。
在环境变量里单独配个安装路径变量可以解决,但是还是希望让客户不做这一步。
有没有好的建议?
离线stlcours

只看该作者 6楼 发表于: 2018-04-23
加双引号试试
离线songhuirong1

只看该作者 7楼 发表于: 2018-04-23
加双引号就可以解决
离线qqlinx

只看该作者 8楼 发表于: 2018-04-23
回 songhuirong1 的帖子
songhuirong1:加双引号就可以解决 (2018-04-23 16:31) 

能具体点吗?是全路径加双引号?
m_proc->start("C:/Program Files/MSBuild/12.0/Bin/vbc.exe", args2);
这样用全路径是可以的。
但是我想用把C:/Program Files/MSBuild/12.0/Bin加到环境变量,然后用
m_proc->start("vbc", args2);
离线songhuirong1

只看该作者 9楼 发表于: 2018-04-26
回 qqlinx 的帖子
qqlinx:能具体点吗?是全路径加双引号?
m_proc->start("C:/Program Files/MSBuild/12.0/Bin/vbc.exe", args2);
这样用全路径是可以的。
但是我想用把C:/Program Files/MSBuild/12.0/Bin加到环境变量,然后用
....... (2018-04-23 22:34) 

  QProcess process;
  QStringList env = QProcess::systemEnvironment();
  env << "TMPDIR=C:\\MyApp\\temp"; // Add an environment variable
  process.setEnvironment(env);
  process.start("myapp");
这是Qt帮忙文档里的示例
快速回复
限100 字节
 
上一个 下一个