我们如何在 C# 中设置/获取其他用户的环境变量?
Posted
技术标签:
【中文标题】我们如何在 C# 中设置/获取其他用户的环境变量?【英文标题】:How can we set/get other users Environment variable in c#? 【发布时间】:2012-06-12 09:22:18 【问题描述】:用户环境变量对于机器上的每个用户帐户都是独立的。
考虑以下情况,我使用非管理员用户帐户 userA
登录,现在我想通过使用在 userA
中运行的 C# 应用程序来获取/设置其他用户(比如 userB
)的环境变量的上下文。
这可能吗?如果是这样,我该怎么做?
【问题讨论】:
你为什么要这样做?这似乎是一个糟糕的应用程序设计。 @pylover:我在我的 c# 应用程序中执行不同的脚本。脚本将在不同的不同用户上下文中执行。我想在 c# appln 和脚本之间共享环境变量。脚本将修改 env var 值,我将在 c# appln 中获得更改的值。脚本类型也不是固定的(可以是任何 .cmd、.vbs、.ps1) 【参考方案1】:环境变量存储在注册表中,因此要为其他用户更改它们,您必须导入他们的注册表配置单元。
用户变量的键是
HKEY_CURRENT_USER\Environment
系统变量的键是
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment
因此,如果您导入当前用户配置单元,您可以为其他用户更改它,或者对于机器变量,从任何管理员帐户更改 HKLM
键。
这很麻烦,我不建议你这样做。
或者你可以使用一些 P/Invoke 来使用Impersonation.
【讨论】:
每个用户都有一个独立的 HKEY_CURRENT_USER 注册表树。任何用户都不必更改其他用户的条目 我不确定你的意思。你是在说HKEY_USERS\S-1-5...
键吗?
@Bail C:HKEY_CURRENT_USER 只有当前用户 evn var 值。我想修改其他用户的 env var 值
@sailer 是的,但是如果您导入其他用户 NTUSER.dat 文件,您可以编辑他们的。有关详细说明,请参见此处。 ghacks.net/2008/03/12/…以上是关于我们如何在 C# 中设置/获取其他用户的环境变量?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Unity(C#,目前针对 iOS)中设置每周重复推送通知?