我需要在ASP.NET应用程序中设置环境variablesCOMPLUS_FORCEENC=1 。 这个variables必须在工作进程开始生效时设置。
所以我这样做了:
Users和IIS_IUSRS的成员。 不幸的是,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设置为true的processModel元素。
它应该是这样的:
<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回收甚至服务器重启。
我有一个完整的工作示例在这个答案