0

我只是尝试通过 PATH env 解析它的位置来运行一个新进程。变种。因为我使用 Qt 这意味着我添加了

X:\文件夹\

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

QProcess::startDetached("test.exe")

这实际上有效。

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

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

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

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

4

2 回答 2

1

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

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

于 2014-01-17T08:51:31.607 回答
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 方式。参考这里:GetModuleFileName

于 2014-01-17T09:12:45.253 回答