Windows 7 使用rundll32 user32.dll指示用户';中国的环境发生了变化

Windows 7 使用rundll32 user32.dll指示用户';中国的环境发生了变化,windows-7,path,user32,rundll32,Windows 7,Path,User32,Rundll32,我无法在windows 7中修改环境变量。 但是,我已被授予修改注册表设置的权限。 例如,我可以修改: HKEY\U LOCAL\U MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment 关键字:BPATH 它被附加到我的系统的pathEnv的末尾 但是,当我进行更改时,更改直到下次重新启动才会生效 我想找到一个“Alwasy Installed”的命令行,它可以发出BPATH更改的信号,以便为后续程序和窗口始终

我无法在windows 7中修改环境变量。 但是,我已被授予修改注册表设置的权限。 例如,我可以修改: HKEY\U LOCAL\U MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment 关键字:BPATH 它被附加到我的系统的pathEnv的末尾

但是,当我进行更改时,更改直到下次重新启动才会生效

我想找到一个“Alwasy Installed”的命令行,它可以发出BPATH更改的信号,以便为后续程序和窗口始终更新“PATH”

rundll user32.dll, [ BroadcastSystemMessage PATH CHANTGED... or somehting...]
条件:

  • 我只能通过注册表编辑路径和bpath,而不能从系统的“高级”选项卡编辑路径和bpath
  • 我不想安装任何不属于标准开箱即用windows 7安装的软件
  • 通常,这应该仅从PowerShell提示符的CMD提示符执行
    在Powershell中,以下命令将系统变量“variableName”设置为variableValue的值。 最后一个值可以是
    机器
    用户
    过程

    PS C:\>[Environment]::SetEnvironmentVariable("variableName","variableValue","Machine")
    

    shell向系统发送更新环境广播。任何打开的shell都不会接收新的环境变量。

    这听起来很困难,而且无法使用rundll32完成-我知道,因为我已经尝试过了。这里有很多问题,rundll的文档是从哪里链接来的。这基本上只调用表单的函数:

    无效回调 入口点(HWND HWND、HINSTANCE hinst、LPSTR lpszCmdLine、int nCmdShow)

    这意味着-您可以调用特殊函数,这些函数是为使用此工具调用而设计的,也可以调用简单函数,它们不带参数,或者可能只是一个HWND

    要刷新环境,您需要广播(即SendMessageTimeout To HWND_broadcast)WM_SETTINGCHANGE消息,第4个参数(wparam)应为0,LPRAM应为L“environment”(注意L-它必须是一个宽字符串,否则变量不会刷新!)

    这里有一些正在工作的PS代码,我不记得是谁写的(实际上是 WM_SETTINGCHANGE的MSDN示例(从C++翻译而来):

    它不止是一个命令,但适合一个小脚本

    我还没有用变量(路径)中的变量尝试过你的技巧,但可能是, 这样的配置需要两次后续刷新(第一次允许更新BPATH,第二次允许更新BPATH值。

    Powershell:

    [Environment]::SetEnvironmentVariable("path",[Environment]::GetEnvironmentVariable("path"),"Machine")
    
    好了, 将Path Machine变量设置为其自身

    (请注意,如果您更改了“路径”,并且它没有更新为Explorer.exe,Powershell可能会再次重置当前环境!)

    [Environment]::SetEnvironmentVariable("path",[Environment]::GetEnvironmentVariable("path"),"Machine")