通过 PATH 环境启动程序.具有正确工作目录的变量
Start program by PATH env. var. with right working directory
我只是尝试通过 PATH env. var 解析其位置来运行一个新进程。由于我使用 Qt,这意味着我添加了
X:\文件夹\
到我的 PATH 变量,在我的入门应用程序中我正在调用
QProcess::startDetached("test.exe")
这实际上有效。
但是测试.exe将数据写入其工作目录。这些数据最终位于入门应用程序的目录中,而不是 X:\folder\,这不是我想要的。
通过在 CLI 中键入"test.exe",我直接在 windows 命令行中测试了行为,那里是一样的(将数据写入当前目录)。
有没有办法(在C++或命令行中)使用 PATH 启动进程,同时还使用 PATH 中找到的目录作为新进程的工作目录?
我可以搜索自己的 PATH,分析结果并通过另一个 QProcess::startDetached() 重载启动程序,但我想知道是否有更简单的方法。
使用路径时,操作系统不会"移动到当前目录"。你将不得不自己做。(在大多数情况下,你不会真的希望应用程序移动到不同的目录 - 如果编译器在你执行gcc foo.c
时这样做了怎么办 - 那么你必须传递所有内容的完整路径,因为你当然不想把你的源文件放在编译器所在的位置 - 在许多情况下,你甚至可能无法写入Unix/Linux系统上的该目录)。
您必须在前面加上正确的文件夹[我建议使用应用程序安装目录可能不是最佳位置!],或者chdir(...)
将当前工作目录更改为您希望数据的位置。大多数应用程序(使用将文件存储在像这样的特定位置的原则)在某个设置中存储"默认目录",因此用户可以更改设置以适应他/她的设置。
至少有 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
};
这是检索当前进程位置的标准窗口方式。此处引用: 获取模块文件名
- 将双精度值转换为 char 变量时字符串流如何工作
- 私有变量无法正常工作的C++getter方法(只有Java经验)
- C++工作不统一,所有变量都定义
- emplace_back初始化列表错误,当初始化列表在独立变量上工作时
- 变量地址的运算符[]是如何工作的
- 可视化的c++变量赋值使代码正常工作
- 在 lambda 中通过引用捕获thread_local变量无法按预期工作
- 返回对局部变量的引用是否正常工作?
- 访问其他线程堆栈变量如何在C++中工作?
- 为什么分配给gr_complex变量(GNU Radio)不再为我工作?
- 如果 (QString.contains()) 不能正常工作,请使用 temp bool 变量进行更正
- 为什么在CTOR工作中将温度变量传递到const Ref中
- C :用sizeof()operator在for for loop中增加一个int变量,只能工作一次
- 使用 swig 在 Python 中分段错误(核心转储),但当我更改变量名称时它可以工作
- 我对变量在递归函数中如何工作的理解是否正确?
- 为什么用未申报的变量工作调用函子
- 全局变量增量在 C++ 中的工作原理
- 使用未来wait_for时无法检查成员变量,但是如果我睡在线程中,它可以工作
- 带有双精度的变量无法正常工作
- 如何以相同的方法在子类中超载的相同方法来实现工作变量参数方法