无法在注册表中创建环境变量

时间:2020-03-05 18:46:47  来源:igfitidea点击:

我有一个自定义安装程序操作,该操作可更新PATH环境并创建其他环境变量。将目录添加到现有路径变量可以很好地工作,但是由于某种原因,我创建新环境变量的尝试未成功。我使用的代码是:

using (RegistryKey reg = Registry.LocalMachine.OpenSubKey(@"SYSTEM\CurrentControlSet\Control\Session Manager\Environment", true))
        {
            reg.SetValue("MYVAR", "SomeVal", RegistryValueKind.ExpandString);
        }

编辑:操作系统是32位XP,据我所知它正在静默失败。

解决方案

回答

这是什么操作系统?在64位系统上吗?故障的本质是什么:无声或者引发异常?

我们可以尝试运行ProcessMonitor并查看是否看到尝试设置该值的尝试。

回答

我们是否有任何理由必须通过注册表进行操作?

如果不是,则可以从.NET 2.0开始使用Environment.SetEnvironmentVariable()。它允许我们根据机器,进程或者用户进行设置。

回答

事实证明,还有另一个问题阻止了我问题中的代码被调用。但是,我之所以使用Win32程序集,是因为我所遵循的示例代码是在环境程序集可用之前编写的。因此,感谢Peter指出环境API。

回答

为什么要为此使用CustomAction? Windows Installer支持本地更新环境变量。