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

boo*_*ife 5 windows iis environment-variables user-profile

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

因此,我这样做了:

  1. 使用计算机管理控制台创建一个新用户。
  2. 设置密码。
  3. 确保它的成员UsersIIS_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 机器。

小智 6

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

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

%windir%\system32\inetsrv\config\applicationHost.config
Run Code Online (Sandbox Code Playgroud)

并在该部分中为您的站点应用程序池添加一个设置为的processModel元素。setProfileEnvironmenttrueapplicationPools

它应该是这样的:

<add name="ASP.NET v4.0" managedRuntimeVersion="v4.0">
      <processModel identityType="ApplicationPoolIdentity" loadUserProfile="true" setProfileEnvironment="true" />
</add>
Run Code Online (Sandbox Code Playgroud)

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

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


Pet*_*orf 0

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

喜欢:

 System.Environment.SetEnvironmentvariable("myvar", "my value", System.EnvironmentvariableTarget.user)
Run Code Online (Sandbox Code Playgroud)

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

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