【发布时间】:2021-04-23 03:16:08
【问题描述】:
我不知道如何在 Microsoft Internet Information Services (IIS) 版本 10 中设置和读取环境变量。我有一个需要环境变量的快速 CGI 应用程序。在以前版本的 IIS 中,我只是在 Windows“系统属性”中设置系统范围的变量。但是在 IIS 10 中,我的 FCGI 应用程序没有读取它们。所以我的第一个问题是,是否需要采取一些步骤让 IIS 进程可以读取系统变量?
另外,如何在 IIS 10 中设置环境变量?这个Microsoft site 解释了它,但不够详细,我无法让它工作。具体来说,您将<environmentVariables> 部分放在哪个文件和哪个部分中?示例 XML 和命令行示例有 name="Contoso"(见下文),但那是什么 - 应用程序池的名称,或者我的 FCGI 应用程序,或其他什么?
<applicationPools>
<add name="Contoso" managedRuntimeVersion="v4.0" managedPipelineMode="Classic">
<environmentVariables>
<add name="foo" value="bar" />
</environmentVariables>
</add>
</applicationPools>
编辑以回应 Jokies Ding:
MAP22 和 PROJ_LIB 是我需要的两个环境变量。在 C:\Windows\System32\inetsrv\Config\applicationHost.config
我有:
<applicationPools>
<add name="DefaultAppPool" />
<add name=".NET v4.5 Classic" managedRuntimeVersion="v4.0" managedPipelineMode="Classic" />
<add name=".NET v4.5" managedRuntimeVersion="v4.0" />
<add name="ASP.NET v4.0" autoStart="true" managedRuntimeVersion="v4.0" />
<applicationPoolDefaults managedRuntimeVersion="v4.0">
<processModel identityType="ApplicationPoolIdentity" />
<environmentVariables>
<add name="PROJ_LIB" value="/gdal/bin/proj6/SHARE" />
<add name="MAP22" value="/tetonwy/mapserv/main.map" />
</environmentVariables>
</applicationPoolDefaults>
</applicationPools>
和
<fastCgi>
<application fullPath="C:\gdal\bin\ms\apps\mapserv.exe">
<environmentVariables>
<environmentVariable name="MAP22" value="C:\tetonwy\mapserv\main.map" />
<environmentVariable name="PROJ_LIB" value="C:\gdal\bin\proj6\SHARE" />
</environmentVariables>
</application>
</fastCgi>
在 cmd 窗口中,环境变量是可见的
C:\>set MAP22
MAP22=C:\tetonwy\mapserv\main.map
C:\>set PROJ_LIB
PROJ_LIB=C:\gdal\bin\proj6\SHARE
所以看起来我已经在各处设置了变量,但应用程序没有看到它们。 C:\gdal\bin\ms\apps\mapserv.exe 是看不到环境变量的 FastCGI 应用程序。这是我在以前版本的 IIS 中使用的编译 C 程序。
【问题讨论】:
-
我相信你应该为 FastCGI 使用这个特定的设置,docs.microsoft.com/en-us/iis/configuration/system.webserver/…
标签: iis