若是要在“命令提示符”中运行本身的软件,通常都须要cd到目录,才能直接运行,而配置环境变量能够简化这一部分操做。mysql
好比使用绿色版的MySQL时,就须要本身添加bin目录到“系统变量”的“Path”中,虽然用批处理比较方便,一行就能够搞定,以下:sql
wmic ENVIRONMENT where "name='Path' and username='<system>'" set VariableValue="%path%;C:\MySQL\Bin"
注:"name='Path' and username='<system>'"为系统变量中Path变量。bash
C:\MySQL\Bin为MySQL的路径spa
虽然方便,可是,若是须要写一个自动配置MySQL的程序,去使用system("")调用总感受有点怪怪的。code
下面记录下另外一种实现的方法。blog
在Windows系统中,能够直接向注册表写入数据,从而到达设置环境变量的目的。io
Path变量在注册的位置为:HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\Environmentclass
1 HKEY hKey; 2 const char *mysql = ";C:\\mysql\\bin"; 3 const char *key = "System\\CurrentControlSet\\Control\\Session Manager\\Environment"; 4 5 if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, key, 0, KEY_READ|KEY_WRITE, &hKey) != ERROR_SUCCESS) 6 { 7 //RegOpenKeyEx Failure!
} 9 DWORD dwType = REG_SZ; 10 char data[1024] = {}; 11 DWORD dwSize = sizeof(data); 12 13 //获取当前环境变量Path的值 14 if (RegQueryValueEx(hKey, "Path", NULL, &dwType, (LPBYTE)data, &dwSize) != ERROR_SUCCESS) 15 { 16 //RegQueryValueEx Failure!
} 18 char *environment = new char[strlen(mysql) + strlen(data)]; 19 sprintf(environment, "%s%s", data, mysql); 20 21 //设置环境变量Path的值 22 if (RegSetValueEx(hKey, "Path", NULL, REG_SZ, (const unsigned char *)environment, strlen(environment)) != ERROR_SUCCESS) 23 { 24 //RegSetValueEx Failure!
} 26 RegCloseKey(hKey); 27 delete[] environment; 28 environment = NULL;