Environment.GetEnvironmentVariable将找不到变量值

时间:2012-10-05 22:33:12

标签: c# .net web-services iis environment-variables

如果从IIS上托管的webMethod中进行调用,为什么Environment.GetEnvironmentVariable("variableName")不会获得变量值?如果我从同一台机器上的控制台应用程序调用它,它将起作用?

我在哪里设置这些变量以使IIS Web服务可见?我应该使用Environment.GetEnvironmentVariable(name, target)中的第二个参数来获取它吗?

实际上非常简单:

[WebMethod(Description = "Gets the environment variable value.")]
public string GetEnvironmentVariable()
{
    return Environment.GetEnvironmentVariable("VARIABLE_NAME_HERE");
}

顺便说一下,VARIABLE_NAME_HERE设置在系统和用户级别。

5 个答案:

答案 0 :(得分:24)

我遇到了同样的问题,感谢@sergserg,我提出了这个问题并且有效:

REPETER(2)
.INSTRUCTIONS(() => {
xxx = xxx + 1 ;
REPETER(5)
.INSTRUCTIONS(() => {
xxx = xxx + 2 ;
alert(i_repeter);
}
);
}
);

重要的一点是使用var value = Environment.GetEnvironmentVariable(key, EnvironmentVariableTarget.User)

答案 1 :(得分:21)

重新启动Visual Studio为我修复了它(猜测IIS Express也会缓存这些值)。

答案 2 :(得分:13)

请阅读此处了解更多信息:

Using System Wide Environment Variables in .NET Application


具体做法是:

  

什么是系统环境变量?

     

环境变量是保存有关的信息的字符串   系统中的整个环境。这些字符串值是动态的   它们会影响系统的运行方式。环境   变量可分为两种主要类型:

     

系统变量:无论当前是什么,它们都会影响整个系统   用户是。它们由Windows定义并保存在注册表中。您   需要是管理员才能修改它们。你通常   需要重新启动计算机才能使这些更改生效。

     

用户变量:它们会影响当前的当前环境   系统用户。它们可以被任何系统删除,修改和添加   用户。它们由Windows安装程序,某些程序和用户使用。   对这些变量的更改将保存到注册表并生效   立即


如果您尝试调用计算机上不存在的环境变量,则会出现问题。您必须尝试查找本地计算机上存在的变量,但不能在Web服务的主机上查找。

答案 3 :(得分:8)

您需要使用iisreset命令重新启动IIS。

答案 4 :(得分:0)

cmd、PowerShell 和 Visual Studio(可能也由 VS Code)共享一个 DLL 或一些代码,它们在加载时缓存环境变量(每个应用程序单独)。

因此,如果您正在测试要更改环境变量的内容,而不是重新启动 IDE(这很慢),您只需启动一个单独的 cmd 或 PowerShell 来测试、更改环境变量,然后只需重新启动 cmd 或 PowerShell。我推荐 PowerShell,因为您可以使用向上箭头重复使用在之前会话中键入的命令。