Environment.GetEnvironmentVariable(“Path”)在ASP.NET中返回不同的值

问题描述 投票:0回答:1

我在ASP.NET Web应用程序中运行的Oracle客户端遇到了一些问题。经过一些检查后,我发现问题可能是Environment.GetEnvironmentVariable("Path")返回错误的值。

如果我在控制台应用程序中调用该方法,则返回正确的值。如果我在ASP.NET Web应用程序中调用它,它将返回另一个(错误的)值,我无法在系统属性或Windows注册表中找到它。

我的ASP.NET应用程序在Local IIS下运行,AppPool标识设置为我的User(与运行控制台应用程序的相同)。

要确认我在两个应用程序上检查了以下属性,并且值是相同的:

  • System.Security.Principal.WindowsIdentity.GetCurrent().Name
  • Environment.UserName

我试着查看GetEnvironmentVariable的源代码,但它基本上包含了对Win32方法GetEnvironmentVariable的调用(源代码“显然”不可用)。

我错过了什么?

经过一些检查后,我注意到即使我在控制台应用程序中获得的值与我在那里找到的值不同:

System Properties

那么GetEnvironmentVariable的“来源”是什么?

Microsoft says表示进程环境变量是从父进程加载的,所以我检查了w3wp.exe进程层次结构。它是以下内容:

wininit.exe - > services.exe - > svchost.exe - > w3wp.exe

wininit,services和svchost作为SYSTEM运行。

wininit和services路径环境变量包含我可以在系统属性(“系统环境变量”)中找到的值。 svchost有不同的值,因此(可能)我在控制台应用程序中获得的值与我在ASP.NET Web应用程序中获得的值之间的差异的原因是svchost编辑此值。

c# asp.net .net
1个回答
0
投票

我相信你改变了"Path"并没有重新启动你的IIS。 Environment.GetEnvironmentVariable将返回当前流程的值。如果当前进程尚未重新启动,则不会看到修改后的值。

因此,重新启动IIS,然后您将获得该值。

您可以在GUI中重新启动该过程,或转到命令提示符并执行iisreset

© www.soinside.com 2019 - 2024. All rights reserved.