VC/NSIS 设置环境变量

4020阅读 0评论2013-05-14 leibniz_zsu
分类:Windows平台




点击(此处)折叠或打开

  1.   //unicode编码下

  2.        HKEY hregkey;
  3.    DWORD dwReturnValue = 0;
  4.    CString strEnvironmentPath(_T("")); //环境变量值

  5.    TCHAR chsys[MAX_PATH] = {0};
  6.    CString sSysCh;
  7.    GetSystemDirectory( chsys , sizeof(chsys) ); //获取系统盘盘符
  8.    sSysCh.Format( _T("%s") , chsys );
  9.    CString charSysCh = _T("");
  10.    charSysCh.Format(_T("%c"),sSysCh.GetAt(0));
  11.    sSysCh = charSysCh + _T(":\windows\system32;") ;//设置system32环境变量参数
  12.    long res = RegOpenKeyEx(HKEY_LOCAL_MACHINE,
  13.       _T("System\CurrentControlSet\Control\Session Manager\Environment"),
  14.       0, KEY_ALL_ACCESS, &hregkey); //打开注册表环境变量
  15.    if(res == 0)
  16.    {
  17.      LPBYTE lpa = new BYTE[500];
  18.       DWORD dwAidSize=500;
  19.       DWORD type=REG_SZ;
  20.       if(ERROR_SUCCESS == ::RegQueryValueEx(hregkey,_T("Path"),
  21.          NULL,&type,lpa,&dwAidSize))
  22.       {
  23.          strEnvironmentPath = (LPTSTR)lpa;

  24.        if (strEnvironmentPath.Find(sSysCh) != -1)
  25.             return TRUE;
  26.          strEnvironmentPath.Insert(0,sSysCh);
  27.          if (ERROR_SUCCESS ==::RegSetValueEx(hregkey,_T("Path"),
  28.             0,REG_SZ,(LPBYTE)(LPCTSTR)strEnvironmentPath,
  29.              strEnvironmentPath.GetLength()*2)
  30.           )
  31.        {
  32.           SendMessageTimeout(HWND_BROADCAST,
  33.            WM_SETTINGCHANGE,
  34.            0, (LPARAM) _T("Environment"),
  35.            SMTO_ABORTIFHUNG,
  36.            5000,
  37.            &dwReturnValue); //使修改的环境变量立即生效
  38.           ::RegCloseKey(hregkey);
  39.           return TRUE;
  40.        }
  41.        AfxMessageBox(strEnvironmentPath);
  42.       }
  43.       ::RegCloseKey(hregkey);
  44.    }



;设置PATH路径
ReadRegStr $0 HKLM "SYSTEM\CurrentControlSet\Control\Session Manager\Environment" "Path"
WriteRegExpandStr HKLM "SYSTEM\CurrentControlSet\Control\Session Manager\Environment" "Path" "$0;$INSTDIR\Oracle\bin\"
;刷新环境变量
SendMessage ${HWND_BROADCAST} ${WM_WININICHANGE} 0 "STR:Environment"



上一篇:NSIS在x64系统下的使用
下一篇:ZwQuerySystemInformation 查看系统进程信息