如何在 IIS 7 应用程序中配置环境变量?

如何在 IIS 7 应用程序中配置环境变量?

我需要COMPLUS_FORCEENC=1在 ASP.NET 应用程序中设置环境变量。此变量必须在工作进程开始生效时设置。

因此我这样做了:

  1. 使用计算机管理控制台创建新用户。
  2. 设置密码。
  3. 确保它是Users和的成员IIS_IUSRS
  4. 配置 IIS 应用程序池以使用该用户并加载用户配置文件。这是使用自定义池,而不是默认池。
  5. 以该用户身份登录来设置变量。
  6. 重新登录以确保变量已设置。
  7. 重新启动操作系统。
  8. 确保应用程序加载并正常工作。

不幸的是,ASP.NET 应用程序看不到该变量。我从应用程序内部打印了整个环境。

当我在工作进程上使用 Process Explorer 时,我发现它在正确的用户下运行,但未设置变量。此外,变量TEMP指向C:\Windows\Temp而不是(如预期的那样)指向用户配置文件的临时目录(该目录存在)。我理解这是用户配置文件未加载的标志。

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

在此处输入图片描述

我做错了什么?如何让变量出现?

这是一台 Windows 7 机器。

答案1

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

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

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

并在 部分中添加一个processModel元素并将setProfileEnvironment其设置true为您的站点应用程序池applicationPools

它看起来应该是这样的:

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

Windows 7 SP1 导致 IIS 上的 IntelliTrace 收集失败更多细节。

注意:您应该applicationHost.config以管理员权限编辑该文件,并且在更改后重新启动计算机。

答案2

只需在 asp.net 页面中设置/创建环境变量

喜欢:

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

这应该可以在 AppPool 回收甚至服务器重启后继续存在。

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

相关内容