如何在IIS 7应用程序中configuration环境variables?

我需要在ASP.NET应用程序中设置环境variablesCOMPLUS_FORCEENC=1 。 这个variables必须在工作进程开始生效时设置。

所以我这样做了:

  1. 使用“计算机pipe理”控制台创build一个新用户。
  2. 设置密码。
  3. 确保它是UsersIIS_IUSRS的成员。
  4. configurationIIS应用程序池以使用该用户并加载用户configuration文件。 这是使用自定义池,而不是默认的池。
  5. 以该用户身份login以设置variables。
  6. 重新确定variables设置。
  7. 重新启动操作系统。
  8. 确保应用程序加载和工作。

不幸的是,ASP.NET应用程序没有看到这个variables。 我从应用程序内打印整个环境。

当我在工作进程上使用Process Explorer时,我发现它在正确的用户下运行,但未设置variables。 此外, TEMPvariables指向C:\Windows\Temp而不是(如预期)到用户configuration文件的临时目录(存在)。 我知道这是用户configuration文件未被加载的标志。

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\hivelist显示该用户加载的configuration单元。 该用户的Environment密钥似乎已正确填充:

在这里输入图像说明

我做错了什么? 我怎样才能使variables出现?

这是一台Windows 7机器。

Windows 7 SP1为IIS引入了一个新的默认设置,可防止为IIS应用程序池加载configuration文件特定的环境variables。

因此,对于Windows 7 SP1,您还需要编辑以下文件:

 %windir%\system32\inetsrv\config\applicationHost.config 

并在applicationPools部分中为您的站点应用程序池添加setProfileEnvironment设置为trueprocessModel元素。

它应该是这样的:

 <add name="ASP.NET v4.0" managedRuntimeVersion="v4.0"> <processModel identityType="ApplicationPoolIdentity" loadUserProfile="true" setProfileEnvironment="true" /> </add> 

有关更多详细信息,请参阅Windows 7 SP1导致IntelliTrace集合在IIS上失败 。

注意:您应该使用pipe理权限编辑applicationHost.config文件,更改后应重新启动计算机。

只需在asp.net页面中设置/创build环境variables

喜欢:

  System.Environment.SetEnvironmentvariable("myvar", "my value", System.EnvironmentvariableTarget.user) 

这应该幸免于AppPool回收甚至服务器重启。

我有一个完整的工作示例在这个答案