目的
最近遇上了设置环境变量的问题,看似是小问题,想解决好,实在是一件不容易的事。
看看当时,我遇到这些问题的无奈:
首先说,是在windows进行环境变量的设置,如果在Linux那肯定是简单了。
一般来说,首先是设置系统的环境变量,这条路,是一条复杂的路,首先得写一个程序设置系统的环境变量,这一件事,不好弄,首先主程序不能做这一件事,因为主程序,依赖一些DLL,找不到这些DLL,主程序边启动都无法启动,当然,可以把DLL放到当前路径下,如果DLL少的话,还可以接受,如果多的话,不就好了,都放在当前路径下实在是太乱了,怎么办?
这又有一个新思路,就是把环境变量只设置进程的环境变量,这样,就不用管系统环境变量的事了,开发一个单独的启动进程,其设置进程环境变量,然后,再启动主程序,主程序做为了启动进程的子进程,其就有了进程的环境变量,其就能依据所提供的进程环境变量路径,找到这些依赖的DLL,这样,系统就能正常启动了。
情况
系统环境变量的方法:—复杂且不立即生效
代码:
std::vector<std::wstring> pathList = {
L"lib\\opencv"};
wchar_t path[MAX_PATH];
DWORD size = GetModuleFileNameW(NULL, path, MAX_PATH);
if (size == 0)
{
printf("Error getting current executable path\n");
return 1;
}
const wchar_t* newName = L"PATH";
wchar_t currentValue[4096];
DWORD currentValueSize = sizeof(currentValue) / sizeof(currentValue[0