相关疑难解决方法(0)

在C++中设置本地环境变量

如何在C++中设置环境变量?

  • 他们不需要坚持执行程序
  • 它们只需要在当前过程中可见
  • 平台独立的偏好,但对我的问题只需要在Win32/64上工作

谢谢

c c++ manpage

41
推荐指数
2
解决办法
6万
查看次数

以编程方式将目录添加到Windows PATH环境变量

我正在编写一个Win32 DLL,其函数可以将目录添加到Windows PATH环境变量(在安装程序中使用).

在DLL运行后查看Regedit或控制面板中的环境变量,向我显示我的DLL已成功添加到HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment和的路径HKEY_CURRENT_USER\Environment.

但是当我启动一个新的命令提示符(运行DLL之后)时,我添加的目录没有显示在输出中echo %PATH%,我无法通过键入其名称来访问该目录中的可执行文件.

我认为我的程序没有很好地通知系统PATH已经改变,或者它可能在更改完全生效之前通知它们.我阅读了微软一篇文章,文章WM_SETTINGCHANGE在更改环境变量后广播该消息,我正在使用以下代码:

DWORD result2 = 0;
LRESULT result = SendMessageTimeout(HWND_BROADCAST, WM_SETTINGCHANGE, 0,
    (LPARAM)"Environment", SMTO_ABORTIFHUNG, 5000, &result2);
if (result == 0){ /* ... Display error message to user ... */ }
Run Code Online (Sandbox Code Playgroud)

我的电话的顺序是:RegCreateKeyEx,RegSetValueEx,RegCloseKey,SendMessageTimeout

如果我在控制面板"环境变量"窗口中按"确定",我的DLL对PATH所做的更改将显示在新创建的命令提示中,因此控制面板正在做一些事情来传播PATH更改; 我想弄明白它是什么,做同样的事情.

有谁知道我应该怎么做?

我正在运行64位Windows Vista,但我希望这适用于所有Windows XP,Vista和Windows 7操作系统.

更新: 我上面发布的代码的问题是我没有在"环境"字符串上放置L前缀.虽然它没有明确地说明我在Microsoft文档中的任何地方,但LPARAM需要是指向WCHAR字符串(2字节字符)而不是CHAR字符串的指针,这是Visual Studio编译器默认生成的当我写一个字符串文字.我的问题的解决方案是将"环境"改为L"环境".(我以为在发布这个问题之前我已经尝试过了,但显然我没有正确地尝试过!)但是任何想要完成这个任务的完整C++解决方案的人都应该看看Dan Molding的答案.

c++ registry environment winapi environment-variables

15
推荐指数
1
解决办法
1万
查看次数

删除环境变量不起作用

为什么reg delete HKCU\Environment /F /V TestVar在 Windows 7 Professional 中删除环境变量会将其从注册表中删除,但该变量仍然存在?

以下是详细信息:我创建了以下 3 个.cmd文件:

检查变量.cmd

echo TestVar = %TestVar%
pause
Run Code Online (Sandbox Code Playgroud)

设置变量.cmd

setx TestVar 123
pause
Run Code Online (Sandbox Code Playgroud)

删除变量.cmd

reg delete HKCU\Environment /F /V TestVar
pause
Run Code Online (Sandbox Code Playgroud)

然后我按照以下步骤操作(双击以确保每次都启动一个新会话):

  1. 双击Check variable.cmd我看到TestVar不存在
  2. 双击Set variable.cmd它说SUCCESS: Specified value was saved.
  3. 双击Check variable.cmd它会显示变量值。好的!
  4. 双击Delete variable.cmd它说The operation completed successfully.
  5. 双击Check variable.cmd它仍然显示变量值。坏的!
  6. 点击开始菜单,输入environment,点击Edit environment variables for your account打开Environment Variables …

windows registry cmd environment-variables

3
推荐指数
1
解决办法
7625
查看次数

标签 统计

c++ ×2

environment-variables ×2

registry ×2

c ×1

cmd ×1

environment ×1

manpage ×1

winapi ×1

windows ×1