C++添加包含文件的文件夹

标签 c++ windows exe

我有一个非常古老的大项目,在模拟过程中调用不同的 EXE 文件。所有这些都放在一个文件夹中。现在,文件夹目录在路径环境变量中,但不幸的是我不得不从那里删除它。

有没有办法将文件夹添加到进程正在搜索文件的列表中?我知道它可以通过 SetDllDirectory 为 DLL 完成,但这对 EXE 不起作用。

如果做不到,是否可以更改线程(而不是进程)的工作目录?

最佳答案

启动新进程 (EXE) 时,Windows 会为启动的新进程创建父进程环境变量缓冲区的拷贝。因此,对启动进程的环境变量的所有更改都不会影响父进程的环境变量。换句话说,Windows 使用 malloc + memcpy 为启动的进程创建一个新的环境变量表。

所以在你的应用程序中你可以使用GetEnvironmentVariable加载 PATH 的本地拷贝的字符串值。

接下来检查此字符串是否已经包含包含要调用的 EXE 的目录路径(来自您的应用程序的先前调用)。如果 PATH 已包含此路径,则无需执行任何操作。

否则检查 PATH 字符串是否已经以分号结尾。如果不是这种情况,请附加一个分号。然后附加包含要调用的 EXE 的目录的路径。最后,使用 SetEnvironmentVariable 通过更新的字符串更新环境变量 PATH 的进程拷贝.

看看 Changing Environment Variables示例代码。

现在只为您的应用程序(进程)更新 PATH 环境变量,调用或启动其他可执行文件应该可以工作。

关于C++添加包含文件的文件夹,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24990634/

相关文章:

javascript - Node js中创建多个child_process

.net - EXE 压缩(对于 .NET 应用程序)算法以二进制代码显示带有真实人名的奇怪字符

php - Hook 到脚本的运行时

python - 如何在没有命令提示符窗口的情况下运行 wxPython 对话框?

c# - 以编程方式阻止 C#/Windows 中进程与特定主机之间的所有连接

windows - 如何构建 Windows 应用程序的发布版本?

c++ - 如何实现 "const"和 "non-const"重载而不重复代码?

c++ - 使用 copyFile 函数时为 "Access denied",但是,"moveFile"在相同目录上工作正常

c++ - C++中的函数GetCursorPos()和SetCursorPos()的一些问题

java - Windows XP 中合适的 Java 平台是什么?