在站點搭建的時候需要安裝.zip格式的 mysq l和 php的安裝包等,需要將解壓的路徑寫入系統環境變數中,這樣方便在使用mysql或者php的時候不需要新增絕對路徑而直接使用。所以需要將安裝路徑寫入環境變數,如:d:\mywww\server\mysql\5.6\bin; 直接寫入環境變數的path。雖然以前有接觸過登錄檔之類的,但是在用起來的時候還是很生疏,在經過網上查閱參考一些大牛的部落格之後,我整理了一下適合自己使用的**。雖然借鑑了一些大牛的**,但是我也不記得是哪乙個部落格了,在此先感謝。既然是學習得到的知識,那我就整理出來供一些有需要的同學們相互學習,和**,希望指點不足之處。下面附上**。
#include "stdafx.h"
#include #include #include #include #include #include #include #include #include #pragma comment(lib, "shell32.lib")
#include using namespace std;
//標頭檔案有點多,因為是我是從我的demo摳出來的,可以對應的去掉試一下就行了。
int addpath(const tchar* strpath);
bool nystrstri(const wstring& src, const wstring& sub);
bool parseenv(const wstring& data, const wstring path, std::vector& vdata);
int ispathexist(void *perfdata, const tchar *mypath);
int _tmain(int argc, _tchar* argv)
int addpath(const tchar* strpath)
dword dwbuffersize = 8192;
dword dwdata;
dword dwret;
void* perfdata = malloc(dwbuffersize);
dwdata = dwbuffersize;
lpctstr myvariable = _t("path");
dwret = regqueryvalueex(hkey, myvariable, null, null, (lpbyte)perfdata, &dwdata);
while (dwret == error_more_data)
if (dwret == error_success)
int len = dwdata + _tcslen(strpath) + 1;
tchar* temp = new tchar[len];
memset(temp, 0x00, len);
_tcscpy_s(temp, len, (tchar*)perfdata);
std::wstring data;
std::vectorvdata;
parseenv(temp, strpath, vdata);//注意這裡
std::vector::iterator it = vdata.begin();
for (; it != vdata.end(); ++it)
data = data + strpath + _t(";");
vdata.clear();
tchar* pathvalue;
tchar szbuf[4096] = ;
_tcscpy_s(szbuf, sizeof(szbuf) / sizeof(szbuf[0]), data.c_str());
pathvalue = szbuf;
long setresult = regsetvalueex(hkey, myvariable, 0, reg_expand_sz, (lpbyte)pathvalue, (_tcslen(pathvalue) + 1)*sizeof(tchar));
dword dwresult;
sendmessagetimeout(hwnd_broadcast, wm_settingchange, 0, lparam(_t("environment")), smto_abortifhung, 5000, &dwresult);//廣播立即執行
deletetemp;
temp = null;
} regclosekey(hkey);//釋放鍵控制代碼
free(perfdata);//釋放記憶體
perfdata = null;
return 1;
}bool nystrstri(const wstring& src, const wstring& sub)
string strsrc = utf16toansi(src);
string strsub = utf16toansi(sub);
transform(strsrc.begin(), strsrc.end(), strsrc.begin(), ::toupper);
transform(strsub.begin(), strsub.end(), strsub.begin(), ::toupper);
if (strstr(strsrc.c_str(), strsub.c_str()) != null)
return bret;
}bool parseenv(const wstring& data, const wstring path, std::vector& vdata)
bool bret = false;
std::string restr;
std::vector::iterator it = vtemp.begin();
for (; it != vtemp.end();)
else
++it;
} //刪除空字串
for (it = vtemp.begin(); it != vtemp.end();)
else
++it;
} //vdata = vtemp;
std::vector::iterator iit = vtemp.begin();
for (; iit != vtemp.end(); iit++)
return bret;
}int ispathexist(void *perfdata, const tchar *mypath)
tchar * path_t = new tchar[i / 2 + 2];
i = 0;
while (myoldpath[i] != _t('\0'))
path_t[i / 2] = _t('\0');
path_t[i / 2 + 1] = _t('\0');
wstring strmyoldpath;
wstring strmypath;
strmyoldpath = path_t;
strmypath = mypath;
if (strmyoldpath[strmyoldpath.length() - 1] != _t(';'))
if (strmypath[strmypath.length() - 1] != _t(';'))
if (-1 == strmyoldpath.find(strmypath, 0))
delete path_t;
return 1;
}
python操作環境變數(登錄檔)
os.environ 在python 中匯入python自帶模組os,使用os.environ可以獲取所有的環境變數資訊,但是只是乙個對映,也就是說對於environ的修改只是在當前 中,不會去修改本機上真實的環境變數。一 設定系統環境變數 1 os.environ 環境變數名稱 環境變數值 其中k...
環境變數temp的登錄檔路徑
有時候,我需要修改系統的環境變數temp,為了方便我都是在我的電腦的屬性中開啟環境變數對話方塊來修改。每當系統出現問題時,為了確認我的修改是否成功,我需要到登錄檔中檢視相應的鍵值。為了以後方便查詢,在此用文章記錄一下。系統環境變數分為 使用者變數 和 系統變數 兩種。使用者變數 對應的登錄檔路徑為 ...
修改登錄檔修改環境變數PATH
因公司辦公電腦做了許可權設定,不能通過右擊 我的電腦 屬性的方式更改環境變數值 摸索找到了通過修改登錄檔的方式修改path值 win r 輸入regedit開啟冊表編輯器 hkey local machine system currentcontrolset control session mana...