C# Environment.GetEnvironmentVariable的行为异常

C# Environment.GetEnvironmentVariable的行为异常,c#,.net,environment-variables,C#,.net,Environment Variables,在我的控制台应用程序中,我试图读取应用程序环境,无论该应用程序是在本地计算机或RDP中运行,还是在Citrix环境中运行……我发现很奇怪 当我直接从VS 2010环境运行应用程序时。GetEnvironmentVariable始终返回“null”,但当我从bin/release文件夹运行“application.exe”时,它工作正常,我得到的值为Console/RDP/Citrix 知道为什么通过VS运行它而不加载变量吗 我尝试读取“SessionName”如果您启用了UAC,并以管理员身份运

在我的控制台应用程序中,我试图读取应用程序环境,无论该应用程序是在本地计算机或RDP中运行,还是在Citrix环境中运行……我发现很奇怪

当我直接从VS 2010环境运行应用程序时。GetEnvironmentVariable始终返回“null”,但当我从bin/release文件夹运行“application.exe”时,它工作正常,我得到的值为Console/RDP/Citrix

知道为什么通过VS运行它而不加载变量吗


我尝试读取“SessionName

如果您启用了UAC,并以管理员身份运行程序,以便提示您提升权限,您可能会看到此效果(无SessionName环境变量)

通过比较以下命令在两个命令提示(一个正常提示和一个“以管理员身份运行”)下的输出,可以看到这一点:

这将显示以S开头的所有环境变量,因此您可以很容易地看到“以管理员身份运行”命令提示符中缺少SESSIONNAME


因此,我认为您已经从启用UAC的帐户以管理员身份运行VisualStudio。VisualStudio随后会收到这组修改过的环境变量,因此SESSIONNAME将在您找到时为null。然后,当您独立于Visual Studio运行exe时,您没有说“以管理员身份运行”,因此存在SESSIONNAME变量。

我可以想到两种可能性。VisualStudio提供了一个“VisualStudioDeveloper命令提示符”,您可以从“开始”菜单运行它,它位于Microsoft Visual Studio 2010-Visual Studio工具下。它看起来像一个普通的命令提示符,但是有额外的环境变量,可能也删除了一些。使用“设置”命令查看它们。这也是Visual Studio本身正在运行的环境,在Visual Studio下运行程序时也是如此。另一种可能是Visual Studio运行程序时,它通过一个名为YourApplicationName.vshost.exe的小程序来运行。也许这会干扰你查询环境的方式。谢谢RenniePet。注册编辑回答了这个问题。如果你在Citrix会话中,你是如何得到的?非常棒,注册编辑。我用管理员权限运行VS…没有管理员权限它工作正常。谢谢
SET S