C 寫登錄檔新增環境變數

2021-08-04 18:43:14 字數 3687 閱讀 6771

在站點搭建的時候需要安裝.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...