环境变量生效

最近开始学Java。我们主要学Java Application和Java Applet两个分类。为了在任意目录下都能编译和运行Java程序,需要对path和classpath环境变量进行相关设置。终于知道环境变量用处之一了。想用程序来实现一下设置环境变量。好不容易用注册表函数写好,结果不行。晕。。。后来想到应该要刷新一下。注销和重起都可以。但我想实现的是立即生效。后来上网搜了一下,得到如下结果:
通过修改注册表,修改了系统的环境变量,但是不会立即生效,除非在【我的电脑】上点击右键,然后打开环境变量的窗口,点击【OK】后,才能生效。后来用Spy++工具捕获消息,发现在点击【OK】按钮时,发送了WM_SETTINGCHANGE消息。
这里有两种方法可以实现:
1.SendMessage(HWND_BROADCAST,WM_SETTINGCHANGE,0,(LPARAM)TEXT("Environment"));
2.SendMessageTimeout(HWND_BROADCAST, WM_SETTINGCHANGE, 0, (LPARAM)"Environment", SMTO_ABORTIFHUNG, 5000, 0);
终于成功了,高兴哇。后来无意中发现用VBS配置环境变量并立即生效简单得要命,当场晕倒。。。
下面把两种实现方法都贴出来吧。
//////////配置JAVA环境变量////////

#include <windows.h>

#include <string.h>

#include <stdlib.h>

 

int SetValue (char * valueName, char *AddValue);

 

DWORD nLength = MAX_PATH;

char DirectoryName[MAX_PATH];

 

int APIENTRY WinMain(HINSTANCE hInstance,

                     HINSTANCE hPrevInstance,

                     LPSTR     lpCmdLine,

                     int       nCmdShow)

{

        char pValue[MAX_PATH];

        ::ZeroMemory(DirectoryName,MAX_PATH);

        ::ZeroMemory(pValue,MAX_PATH);

 

        // 得到当前执行文件的路径名       

        ::GetCurrentDirectory(nLength,DirectoryName);

 

        // 设置path环境变量

        strcat(pValue,";");

        strcat(pValue,DirectoryName);

        strcat(pValue,"//bin");

        SetValue("path",pValue);

 

        // 重置pValue

        ::ZeroMemory(pValue,MAX_PATH);

 

        // 设置classpath环境变量

        strcat(pValue,".;");

        strcat(pValue,DirectoryName);

        strcat(pValue,"//lib//tool.jar;");

        strcat(pValue,DirectoryName);

        strcat(pValue,"//lib//dt.jar");

        SetValue("classpath",pValue);

        return 0;

}

 

int SetValue(char * valueName, char *AddValue)

{

        DWORD keyType = REG_SZ;       

        BYTE getValue[1024];

        DWORD DataLen = 1024;

        HKEY hRoot = HKEY_LOCAL_MACHINE;

        HKEY hKey;

        char *pIsset;

        ::ZeroMemory(getValue,MAX_PATH);

    char *szSubKey = "SYSTEM//CurrentControlSet//Control//Session Manager//Environment";

       

        // 打开键

        DWORD dwDisposition = REG_OPENED_EXISTING_KEY;       

        LONG lRet = ::RegCreateKeyEx(hRoot, szSubKey, 0, NULL, REG_OPTION_NON_VOLATILE,

 

KEY_ALL_ACCESS, NULL, &hKey, &dwDisposition);

        if (lRet != ERROR_SUCCESS)

                return -1;

       

        // 读取键值

        lRet = ::RegQueryValueEx(hKey,valueName,NULL,&keyType,getValue,&DataLen);

       

        pIsset = strstr((char*)getValue, DirectoryName);

 

        // 如果已设置则返回

        if (pIsset)

        {

                char MsgText[80];

                strcpy(MsgText,valueName);

                strcat(MsgText,"环境变量已配置好,不需再配置!");

                ::MessageBox(NULL,MsgText,"fc提示",MB_OK);

                return -1;

        }

 

        strcat((char*)getValue,AddValue);

       

        // 写入键值

        lRet = ::RegSetValueEx(hKey, valueName, 0, REG_SZ, (BYTE*)getValue, strlen((char*)

 

getValue));

        if (lRet == ERROR_SUCCESS)

        {       

                char MsgText[80];

                strcpy(MsgText,valueName);

                strcat(MsgText,"环境变量配置成功!");

                ::MessageBox(NULL,MsgText,"fc提示",MB_OK);

 

                // 使设置立即生效,下面两种法都可以

                SendMessage(HWND_BROADCAST,WM_SETTINGCHANGE,0,(LPARAM)TEXT("Environment"));

                //SendMessageTimeout(HWND_BROADCAST, WM_SETTINGCHANGE, 0,

 

(LPARAM)"Environment", SMTO_ABORTIFHUNG, 5000, 0);

        }

       

        // 关闭句柄

        ::RegCloseKey(hKey);

        return 0;

}
复制代码
on error resume next

set sysenv = CreateObject("WScript.Shell").Environment("system") '系统环境变量的数组对象

sysenv.Remove("ztest3")                      '删除变量

sysenv("ztest3")="test value"                '添加变量
复制代码
VBS这种简单吧……

 

 

HKEY_CURRENT_USER/Software/Microsoft/Windows/CurrentVersion/Run

<think>好的,用户想了解如何验证环境变量是否成功设置并生效。我需要根据提供的引用资料来整理步骤。首先,引用5提到使用java -version命令检查,如果显示版本信息就说明成功。引用3里提到用echo %PATH%查看系统变量,同时要注意是否有乱码。引用4和5都提到了运行java -version来验证,这可能适用于Java环境变量,但用户的问题可能更广泛,不只是Java。引用2和3讨论了如何让环境变量生效,比如手动刷新或者重启命令行。用户可能遇到设置后没生效的情况,需要检查方法是否正确,比如是否需要重启终端或者使用其他命令。还要考虑不同操作系统的情况,但根据引用资料,用户可能是在Windows环境下。需要分步骤说明,包括查看变量值、验证命令、处理不生效的情况等。还要提醒用户注意路径是否正确,是否有覆盖或乱码问题。可能需要结合多个引用中的方法,比如先检查变量是否存在,再测试相关命令,最后处理不生效的情况。要确保回答结构清晰,步骤明确,用户能一步步跟着操作。</think>### 验证环境变量是否成功设置并生效的方法 #### 1. 通过命令行查看环境变量值 - **查看特定变量**:打开命令提示符(`Win+R` → 输入 `cmd` → 回车),输入以下命令查看具体变量值: ```bash echo %变量名% ``` 例如,检查 `JAVA_HOME`: ```bash echo %JAVA_HOME% ``` 若正确显示配置的路径(如 `C:\Program Files\Java\jdk-17`),则说明变量已设置[^5]。 - **查看全部环境变量**:输入 `echo %PATH%` 可查看系统路径变量,确认新增路径是否包含其中[^3]。 #### 2. 验证环境变量对应的功能 - **Java环境变量示例**:输入以下命令测试是否生效: ```bash java -version ``` 若显示版本信息(如 `java version "17.0.1"`),则说明配置成功[^4]。 - **通用方法**:对于其他环境变量(如 `Python`、`Maven`),可直接在命令行中运行对应命令(如 `python --version`),验证是否能找到可执行文件。 #### 3. 处理环境变量生效的情况 - **刷新环境变量**:修改环境变量后,需重新启动命令行窗口,或通过以下命令临时刷新: ```bash set PATH=%PATH% ``` 此操作会使新配置的路径立即生效[^2][^3]。 - **检查路径正确性**: - 确保路径无拼写错误(如多余空格、斜杠方向错误)。 - 使用 `where 命令`(如 `where java`)检查系统是否能正确找到可执行文件路径[^3]。 - **排查覆盖或冲突**: - 某些软件可能覆盖系统环境变量,需检查是否有冲突配置。 - 若 `echo %PATH%` 显示乱码,可能是路径被错误修改,需手动修复。 #### 4. 系统级验证(Windows) - **通过GUI界面复查**: 1. 右键“此电脑” → 属性 → 高级系统设置 → 环境变量。 2. 在用户变量和系统变量列表中,确认变量名和值是否与预期一致。 --- ### 常见问题总结 | 现象 | 解决方法 | |--------------------|--------------------------------------------------------------------------| | 命令提示“找不到程序” | 检查路径是否包含可执行文件目录,重启命令行或使用 `set PATH` 刷新 | | 变量值显示乱码 | 重新配置环境变量,避免特殊字符或格式错误 | | 修改后仍不生效 | 确保未同时存在用户变量和系统变量冲突,关闭所有终端后重新打开[^1] | 通过上述步骤,可系统性地验证环境变量是否生效,并解决常见配置问题[^2]。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值