【问题标题】:setting and reading environment variables in IIS 10在 IIS 10 中设置和读取环境变量
【发布时间】: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: MAP22PROJ_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 程序。

【问题讨论】:

标签: iis


【解决方案1】:

在通过 FastCGI 使用时 MapServer 无法读取 Windows 上的环境变量存在问题。

通过应用https://github.com/MapServer/MapServer/pull/6304 解决了这个问题,该https://github.com/MapServer/MapServer/pull/6304 将被反向移植到7.x MapServer 版本。

更多详情请见Environment variables ignored using FastCGI and IIS #6289

【讨论】:

    【解决方案2】:

    &lt;environmentVariables&gt; 部分显示为特定应用程序池下的集合。

    您可以在 IIS 全局配置文件 C:\Windows\System32\inetsrv\config\applicationhost.config 中找到它。 “Contoso”是应用程序池的名称。

    我认为 IIS 10 和 PHP FAST-CGI 仍然支持读取系统范围的变量。我可以通过在 IIS PHP-CGI 中运行命令行SET 来获取这些配置。

    你能发布你用来读取变量的代码吗?

    在某些情况下,您的应用程序代码需要提升权限。您可以尝试将 应用程序池标识 更改为 本地系统 并将 匿名身份验证用户 设置为 应用程序池标识

    【讨论】:

    • 我在上面的问题中添加了更多信息,关于我的 C:\Windows\System32\inetsrv\config\applicationhost.config 文件中的内容。
    猜你喜欢
    • 2017-04-09
    • 2019-05-20
    • 1970-01-01
    • 2015-11-21
    • 1970-01-01
    • 2013-03-25
    • 2019-02-05
    • 2020-11-18
    • 1970-01-01
    相关资源
    最近更新 更多