2014-01-17 20 views
0

我只是试图运行一个新的进程通过解析其位置通过PATH环境。变种。由于我使用Qt,这意味着我加入由PATH env启动程序。变种。与正确的工作目录

X:\文件夹\

到我的PATH变量,在我的首发申请我打电话

另外,QProcess :: startDetached( “TEST.EXE”)

其实际工作。

但是,test.exe会将数据写入其工作目录。这些数据最终在starter应用程序的目录中,而不是X:\ folder \,这不是我想要的。

我通过在CLI中键入“test.exe”直接在Windows命令行中测试了这种行为,并且它在那里是一样的(将数据写入当前目录)。

有没有一种方法(在C++或命令行中)使用PATH启动进程,同时使用PATH中的目录作为新进程的工作目录?

我可以为自己搜索PATH,分析发现并通过另一个QProcess :: startDetached()重载启动程序,但我想知道是否有更简单的方法。

+0

也许去输出目录,并从那里启动 –

回答

0

没有复杂的配置至少有3个选项。

1 - 从您的呼叫应用程序更改当前目录到您的test.exe程序所在的位置。这样,文件将转到所需的目录。但是,有可能呼叫应用程序会产生问题或在不应该的地方生成输出,因此需要呼叫应用程序中当前目录的新改变。

2 - 作为参数传递到您的test.exe,它应该生成它的位置文件。

3 - 从您的test.exe确定它所在的位置,并使用此信息更改此过程的当前目录,或者知道路径,在它所在的同一目录中生成文件。

TCHAR szPath[MAX_PATH]; 

if(!GetModuleFileName(NULL, szPath, MAX_PATH)) { 
    // handle error in GetModuleFileName 
} else { 
    // now, szPath contains file path 
}; 

这是检索当前进程位置的标准windows方式。参考here: GetModuleFileName

+0

1和2意味着分析PATH env。变种。由我自己的,因为初学者应用程序不知道(也不应该知道)有关test.exe位置(这是我使用PATH的原因)。 3是一个有趣的想法。使用Qt函数很容易。该解决方案的唯一缺点是,它还会在从VC++ IDE启动应用程序时更改存储位置,从而有效地为每个目标(例如在调试/发布子文件夹中)而不是一个日志(在项目目录中)创建单独的日志。 – Silicomancer

+0

@Silicomancer:那么选择去2/3。不,它不依赖于路径分析。包括将路径传递到存储目录的选项。如果没有路径通过(在生产中),请使用模块路径。在开发环境中,将项目属性中的路径参数作为参数传递给指示项目目录的程序。 –

+0

这是一个好主意。我想我会这样做。谢谢! – Silicomancer

1

当您使用路径时,操作系统将不会“移动到当前目录”。你必须自己做。 (在大多数情况下,你并不希望应用程序移动到不同的目录 - 如果编译器在做这件事情时做了这些事情,那么你必须将完整路径传递给所有内容,因为你肯定不会希望将源文件放在编译器所在的位置 - 在许多情况下,您甚至可能无法在Unix/Linux系统上写入该目录)。

您必须预先安装正确的文件夹[并且我建议使用应用程序安装目录可能不是最好的地方],或者执行chdir(...)将当前工作目录更改为您希望数据的位置。大多数应用程序(使用将文件存储在特定位置的原理)将“默认目录”存储在某个设置中,因此用户可以更改设置以适合他/她的设置。

+0

你是对的。在大多数情况下,这不是我们想要的。在我的情况下,这是一个写入工作目录的中央应用程序日志,并将其存储在应用程序的文件夹中将是一件好事。 所以如果现在有办法,而不是为我自己处理PATH,我会这样做。 我也会考虑使用另一个目录,但如果查找日志文件,他/她可能会首先在应用程序的目录中搜索。 – Silicomancer

相关问题