方法1:getenv,putenv只影响当前进程的环境块。
// 头文件: #include<stdlib.h>   
// 功能: 把字符串加到当前环境中   
// 用法: int putenv(char *envvar);   
// 函数说明: putenv()用来改变或增加环境变量的内容。参数enwar的格式为enwar=value,如果该环境变量原先存在,则变量

内容会依参数enwar改变,否则此参数内容会成为新的环境变量。
  char* p=getenv("testkey");
  int iRet=putenv("testkey=\"c:\\testkey\\123456\"");
  p=getenv("testkey");

方法2:GetEnvironmentVariable,SetEnvironmentVariable只影响当前进程的环境块。
Calling SetEnvironmentVariable has no effect on the system environment variables. The user can add or modify

system environment variables using the Control Panel. To programmatically add or modify system environment

variables, add them to the HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\Environment

registry key, then broadcast a WM_SETTINGCHANGE message. This allows applications, such as the shell, to pick

up your updates. Note that environment variables listed in this key are limited to 1024 characters.

方法3:修改注册表对应键值,然后广播WM_SETTINGCHANGE消息,可以修改用户和系统环境变量并不用重启系统就可立即生效。
当前用户环境变量:"HKEY_CURRENT_USER/Environment" 键下的各参数。
系统环境变量:"HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\Environment"键下的各参数。
涉及到的API函数有:RegOpenKeyEx, RegQueryValueEx, RegSetValueEx; 相关函数的用法可以参考MSDN.
如果控制台是在修改前就打开的,除非关闭后重新开启,不然是无法得到新设置的环境变量的。
通过这几个函数修改环境变量后, 使用了PostMessage(HWND_BROADCAST, WM_SETTINGCHANGE , NULL, NULL),但结果环境变量

并没有生效。再使用SendMessageTimeout(HWND_BROADCAST, WM_SETTINGCHANGE , NULL,

(LPARAM)"Environment",SMTO_NORMAL, 1000, &dwResult),最后使用SendMessageTimeout(HWND_BROADCAST,

WM_SETTINGCHANGE , NULL, (LPARAM)"Environment", SMTO_NOTIMEOUTIFNOTHUNG,1000, &dwResult)成功。

==================================================================

void mainCRTStartup(void)
{
  int mainret;
#ifdef WPRFLAG
  __winitenv = _wenviron;
  mainret = wmain(__argc, __wargv, _wenviron);
#else  /* WPRFLAG */
  __initenv = _environ;
  mainret = main(__argc, __argv, _environ);
#endif  /* WPRFLAG */
}

===================================================================

#include "stdafx.h"
#include "stdlib.h"
#include "Utility.h"

#define SMTO_NOTIMEOUTIFNOTHUNG 0x0008
int main(int argc, char* argv[], char* env[])
{
 //printf("Hello World!\n");
  int i=0;
  while(env[i]){
    if(env[i]==StrStrI(env[i], "dujing"))
      printf("%s", env[i]);
    ++i;
  }
  int iRet=_putenv("dujing=\"C:\\testkey\\123456\"");
  char* p=getenv("dujing");
  char strValue[MAX_PATH];
  iRet=GetEnvironmentVariable("dujing", strValue, sizeof(strValue));
  //CUtility::SetRegString(HKEY_LOCAL_MACHINE, "System\\CurrentControlSet\\Control\\Session Manager\\Environment", "dujing", "\"C:\\testkey\\123456\"");
  //CUtility::SetRegString(HKEY_CURRENT_USER, "Environment", "dujing", "\"C:\\testkey\\123456\"");
  //CUtility::SetRegDword(HKEY_CURRENT_USER, "Environment", "du2", 100);
  CUtility::DelRegValue(HKEY_CURRENT_USER, "Environment", "dujing");
  DWORD dwRet=0;
  SendMessageTimeout(HWND_BROADCAST, WM_SETTINGCHANGE, NULL, (LPARAM)"Environment", SMTO_NOTIMEOUTIFNOTHUNG, INFINITE, &dwRet);
  return 0;
}

VC编程获取和修改环境变量,不重启系统即时生效相关推荐

  1. 修改配置文件后不重启程序即时生效

    SIGHUP信号与控制终端 -------------------------------------------------------------------------------------- ...

  2. 修改linux软件下载,Linux软件下载以及修改环境变量

    一.什么是环境变量 小编的理解就是,告诉系统去哪找到你的文件.简单的例子,当你下载了一个软件Samtools,你想要运行该软件时,如果你不在该软件所在的文件夹, 你就需要在软件命令前加上软件所在的路径 ...

  3. DEFCON议题解读|Dll劫持新思路——修改环境变量

    简介 在2022年的Defcon大会上,安全研究人员Wietze Beukema通过对进程级环境变量的研究,提出了一种Dll劫持新思路,下面就其中涉及的技术点展开介绍. **01 **环境变量 每一个 ...

  4. 【linux草鞋应用编程系列】_2_ 环境变量和进程控制

    一. 环境变量 应用程序在执行的时候,可能需要获取系统的环境变量,从而执行一些相应的操作. 在linux中有两种方法获取环境变量,分述如下. 1.通过main函数的参数获取环境变量 main函数的多种 ...

  5. linux修改jdk版本无效,关于windows和linux系统更换JDK版本后,修改环境变量也无法生效的原因和解决办法...

    今天遇到了一个问题: 我linux系统之前安装JDK12,今天将其改成了JDK1.8,并修改了环境变量,但是通过java -version命令显示的依旧是JDK12的版本. 这是因为,当使用安装版本的 ...

  6. linux环境配置以后生效,Linux中修改环境变量及生效方法

    Linux中修改环境变量及生效方法 在/etc/profile文件中添加变量[对所有用户生效(永久的)] 用VI在文件/etc/profile文件中增加变量,该变量将会对Linux下所有用户有效,并且 ...

  7. jar java classpath_win7中java编程工具安装 java环境变量设置

    win7中java编程工具安装 java环境变量设置 Question:编译是显示'javac'不是内部或外部命令,也不是可运行的程序或批处理文件 解决: 在[系统变量]里编辑java_home.cl ...

  8. Mac下修改环境变量

    Mac下修改环境变量 如果使用默认Bash, 首先修改 ~/.bash_profile 文件,添加文件路径,比如: export PATH=~/bin:/usr/local/bin/node:~/Do ...

  9. linux mint(Ubuntu、Debian) 18修改环境变量

    修改环境变量 [plain] view plain copyprint? sudo gedit /etc/profile sudo gedit /etc/profile 在profile文件的末尾添加 ...

  10. 中修改环境变量_超详干货!Linux环境变量配置全攻略

    Linux环境变量配置 在自定义安装软件的时候,经常需要配置环境变量,下面列举出各种对环境变量的配置方法. 下面所有例子的环境说明如下: 系统:Ubuntu 14.0 用户名:uusama 需要配置M ...

最新文章

  1. 解决Parameter ‘__frch_item_0‘ not found. Available parameters 问题
  2. pytorch dataloader加速
  3. clover 在win10下工作不正常
  4. Linux驱动编写(块设备驱动代码)
  5. 自定义snippet(代码段)就可以极大的提高你的开发效率 VScode快速一键生成html、vue、jsx、ajax、sass、docker等代码片段
  6. Mysql err 1055
  7. element的日期选择使用value-format之后表单验证报错
  8. Javascript 使用Qunit单元测试
  9. 怎么看服务器是实体机还是虚拟机,如何判断一台机器是物理机还是虚拟机
  10. 在线JSON格式化-工具栈
  11. 创业指南:如何快速拿到天使投资?
  12. 使用Python与Sharepoint进行交互——第2部分
  13. 让游戏沉浸感炸裂的实时3D音效技术原理与实践(上)
  14. Harfbuzz version too old (1.2.1)
  15. 软件测试需要学什么,这几点一定要知道
  16. 腾讯-腾讯云citybase产品白皮书
  17. 知识图谱嵌入的Translate模型汇总(TransE,TransH,TransR,TransD
  18. 设计一个好的游戏世界观需要哪些必备要素?
  19. 阿里巴巴计划今日中午推出1688.com批发网
  20. 微信小程序——微信小程序分包

热门文章

  1. nrf52840蓝牙协议栈主机BLE串口
  2. nRF52840(一) 环境搭建
  3. 最全Pycharm教程(5)——Python快捷键相关设置
  4. js数组 reduce函数
  5. C语言实现矩阵的乘法
  6. Linux网卡状态查看
  7. 系统分析和设计方法之系统分析
  8. Add Juniper SRX Cluster into JunOS Space 16.1 Security Director
  9. 微信公众号开发-公众号支付
  10. Q Learning学习笔记