由PATH环境启动程序。变种。有正确的工作目录

时间:2014-01-17 08:36:19

标签: c++ windows command-line search-path

我只是尝试通过PATH env解析其位置来运行新进程。变种。由于我使用Qt,这意味着我添加了

X:\文件夹\

到我的PATH变量,在我的启动应用程序中,我正在调用

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

实际上有效。

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

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

是否有办法(在C ++或命令行中)使用PATH启动进程,同时还使用PATH中的目录作为新进程的工作目录?

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

2 个答案:

答案 0 :(得分:1)

使用路径时,操作系统不会“移动到当前目录”。你必须自己做。 (在大多数情况下,你真的不希望应用程序移动到另一个目录 - 如果编译器在你执行gcc foo.c时这样做了 - 那么你必须通过所有内容的完整路径,因为你当然不希望将源文件放在编译器所在的位置 - 在许多情况下,您甚至可能无法在Unix / Linux系统上写入该目录。

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

答案 1 :(得分: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
};

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