Environment.GetEnvironmentVariable(“Path”)在ASP.NET

时间:2016-03-22 13:04:23

标签: c# asp.net .net

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

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

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

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

  • 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编辑此事实值。

1 个答案:

答案 0 :(得分:0)

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

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

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