读写系统/用户环境变量

 
转自: http://delphi.cjcsoft.net/viewthread.php?tid=43647
使用 SetEnvironmentVariable 和 GetEnvironmentVariable 似乎是
只能对当前进程环境设置环境变量,所以设置后没有能在系统设置里看到,用下列
设置注册表的方法则可以全局设置系统环境变量或者用户环境变量,再发送一条系
统广播通知,达到立即生效的目的.
Reading and Writing System-Wide Environment Variables.

Title: Reading and Writing System-Wide Environment Variables.

Question: How do you set an environment variable that will apply outside the process that set the variable or those spawned by it?

Answer:
On Windows 2000, if you open the control panel and double click on
the system icon, the system properties dialog box will open.  On the
"Advanced" tab, you can click the "Environment Variables" tab to see
a list of the user and system environment variables. The procedures
and functions below allow you to read and write those variables.

It is worth mentioning that you can also use "GetEnvironmentVariable"
and "SetEnvironmentVariable" to read and write environment variables.
However, if you set and environment variable with
"SetEnvironmentVariable", the value you set applies only to the
process that called "SetEnvironmentVariable" or are spawned by it.

The first two procedures read and write environment variables for the
current user.

function GetUserEnvironmentVariable(const name: string): string;
var
  rv: DWORD;
begin
  with TRegistry.Create do
  try
    RootKey := HKEY_CURRENT_USER;
    OpenKey(‘Environment‘, False);
    result := ReadString(name);
  finally
    Free
  end
end;

procedure SetUserEnvironmentVariable(const name, value: string);
var
  rv: DWORD;
begin
  with TRegistry.Create do
  try
    RootKey := HKEY_CURRENT_USER;
    OpenKey(‘Environment‘, False);
    WriteString(name, value);
    SendMessageTimeout(HWND_BROADCAST, WM_SETTINGCHANGE, 0, LParam
      (PChar(‘Environment‘)), SMTO_ABORTIFHUNG, 5000, rv);
  finally
    Free
  end
end;

The next two procedures read and write environment variables for the
system and thus affect all users.

function GetSystemEnvironmentVariable(const name: string): string;
var
  rv: DWORD;
begin
  with TRegistry.Create do
  try
    RootKey := HKEY_LOCAL_MACHINE;
    OpenKey(‘SYSTEM\CurrentControlSet\Control\Session ‘ +
      ‘Manager\Environment‘, False);
    result := ReadString(name);
  finally
    Free
  end
end;

// Modified from
// http://www.delphiabc.com/TipNo.asp?ID=117
// The original article did not include the space in
// "Session Manager" which caused the procedure to fail.

procedure SetSystemEnvironmentVariable(const name, value: string);
var
  rv: DWORD;
begin
  with TRegistry.Create do
  try
    RootKey := HKEY_LOCAL_MACHINE;
    OpenKey(‘SYSTEM\CurrentControlSet\Control\Session ‘ +
      ‘Manager\Environment‘, False);
    WriteString(name, value);
    SendMessageTimeout(HWND_BROADCAST, WM_SETTINGCHANGE, 0, LParam
      (PChar(‘Environment‘)), SMTO_ABORTIFHUNG, 5000, rv);
  finally
    Free
  end
end;
时间: 2024-10-16 02:29:28

读写系统/用户环境变量的相关文章

学习记录008-linux常用命令/设置系统and用户环境变量two

修改文件  vi vi 是linux自带的,vim是vi的升级版 命令:vi 文件名 如果文件存在,那么就直接进入对应的文件的编译模式,如果文件不存在,那么就进入以文件名命名的空文件的编译模式 vi 文件有两张模式: 命令模式:在编辑模式下点击ESC可进入命令模式 编辑模式:只有在该模式的时候才能进入内容的输入操作等,在页面左下角显示INSERT的时候就代表当前是编辑模式 [命令模式] 001 在命令模式下,想要进入编辑模式,操作 i 或者 o 或者a 均可 区别是:i 为切换成编辑模式的基础上

系统环境变量和用户环境变量

环境变量分为系统环境变量和用户环境变量. 你所说的环境变量是指系统环境变量,对所有用户起作用 而用户环境变量只对当前用户起作用. 例如你要用java,那么你把java的bin目录加入到path变量下面,那么它就是系统环境变量,所用用户登陆,在命令行输入java都会有java的帮助信息出来.而如果你在某个用户的变量下面新建一个变量,那么它就只对这个用户有用,当你以其他用户登陆时这个变量就和不存在一样. 这个问题在linux下面就相对好理解一些,系统变量都在/etc/profile文件里面,而用户的

在配置环境变量时是该用系统环境变量还是用户环境变量?

环境变量分为系统环境变量和用户环境变量. 正常所说的环境变量是指系统环境变量,对所有用户起作用,而用户环境变量只对当前用户起作用,如果此电脑登入了另外个用户账号,那配置之前账号的用户环境变量就对另外个用户账号不起作用. 例如你要用java,那么你把java的bin目录加入到path变量下面,那么它就是系统环境变量,所用用户登录,在命令行(cmd)输入java都会有java的帮助信息出来.而如果你在某个用户的环境变量下面新建一个变量,那么它就只对这个用户有用,当你以其他用户登录时这个变量就和不存在

Center os 用户环境变量

vi ~/.bash_profile进入用户环境变量设置 export JAVA_HOME=/usr/java/jdk1.7.0_76export JAVA_BIN=$JAVA_HOME/binexport PATH=$PATH:$JAVA_HOME/binexport CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jarexport PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH source ~/

【ThinkingInJava】22、得到系统的环境变量

/** * 书本:<Thinking In Java> * 功能:得到系统的环境变量 * 文件:EnvironmentVariables.java * 时间:2015年4月8日19:39:08 * 作者:cutter_point */ package Lesson11holdingyourobjects; import java.util.Map; public class EnvironmentVariables { public static void main(String [] arg

Linux - 用户环境变量的查看与设置

1. 查看当前有哪些环境变量 直接输入命令:env 2. 设置用户环境变量 输入命令:vim ~/.bash_profile,打开文件,输入如下内容: 范例(设置maven环境变量): export M2_HOME=~/apache-maven-3.5.2 export PATH=$PATH:$M2_HOME/bin 退出并保存:esc => shift + : => wq => 回车 再输入命令使之生效:source ~/.bash_profile 3. 输入命令:mvn -v,查看是

linux sudo 系统环境变量 用户环境变量

1. sudo就是普通用户临时拥有root的权限.好处在于,大多数时候使用用户自定义的配置,少数情况可以通过sudo实现root权限做事. 故而,需要注意的一点是,在你使用了sudo后,你临时不再是原先用户,不能使用属于自己的命令.举个例子:sudo source ... 该命令会执行失败,提示没有source命令.但你去掉sudo,又可以执行了.(从侧面可以反映sudo不等于获得root所有权限.)莫要滥用sudo. 2. 系统环境变量,对应/etc/profile文件,对所有用户有效.而用户

linux系统和用户环境变量的配置文件

linux系统中有很多系统变量,那么这些变量都存在哪里呢?为什么用户一登录shell就自动有了这些变量呢?下面将介绍几个配置文件. 1./etc/profile:这个文件预设了几个重要的变量,例如PATH.USER.LOGNAME.MAIL.INPUTRC.HOSTNAME.HISTSIZE.umask等等.可以编辑文件在这个文件中增加变量,但是不建议这么做.如果需要更改变量或者增加变量我们可以在/etc/profile.d/这个目录下新建脚本,例如更改变量PATH,增加一个/tmp/:首先vi

springboot读取系统级环境变量,和读写系统属性以及unittest来获取环境变量的方法

环境变量的读取以及系统属性的设置 环境变量只能读取,不能修改,系统属性可以修改 系统变量的读取方式: System.getEnv() 系统属性有多重读取和修改方式: 其修改方式为: 读取系统属性: @Autowired AbstractEnvironment environment; System.setProperty("today","tuesday"); environment.getProperty("test"); 增加新的系统属性: