2014-06-15 72 views
1

我试图通过QProcess运行一个命令,但它不工作。我的命令类似于utility -someflag /path/to/fileutility在PATH中,但看起来QProcess没有使用这个环境变量。在PATH中找到运行命令?

该命令只是失败,我需要指定该实用程序的完整路径(我想避免)。

有没有办法解决这个问题?基本上有些方法可以使QProcess使用PATH变量?

回答

0

所以问题在于它取决于应用程序的启动方式。这是在OSX,但它可能在其他平台上是相似的:

  • 如果它是一个命令行应用程序,并从终端开始,然后将有机会获得ENV变量。

  • 如果它是从Qt Creator启动的,它将无法访问任何env变量。

  • 如果它是一个GUI应用程序(.app),它将无法访问env变量。

我的情况下,因为它是一个GUI应用程序的解决方案是手动更新.app包。首先,文件的Info.plist需要从这个改变:

<key>CFBundleExecutable</key> 
<string>MyApplication</string> 

这样:

<key>CFBundleExecutable</key> 
<string>MyApplication.sh</string> 

然后,仍然在应用程序包,在内容/ MacOS的,创建一个新的文件与应用程序具有相同的名称,但带有.sh扩展名,例如。 “MyApplication.sh”。然后创建启动:

#!/bin/sh 
SCRIPT_DIR=$(dirname "$0") 
source ~/.bash_profile 
logger "$SCRIPT_DIR/MyApplication" 
exec "$SCRIPT_DIR/MyApplication" [email protected] 

source ~/.bash_profile线特别是确保所有的环境(包括PATH变量)将被正确设置。

相关问题