我们如何在 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)中设置每周重复推送通知?

在windows中设置环境变量PATH

如何在Jmeter中设置和获取环境变量来测试API

如何在 JBoss 中设置环境变量

我们如何在核心 PHP 中设置环境变量而不使用 Cpanel 中的任何库

如何在 django 中设置和获取会话变量?