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

C# GetEnvironmentVariable(“Path”)在ASP.NET中返回不同的值,c#,asp.net,.net,C#,Asp.net,.net,我在ASP.NET web应用程序中运行Oracle客户端时遇到一些问题。经过一些检查,我发现问题可能是Environment.GetEnvironmentVariable(“Path”)返回了错误的值 如果我在控制台应用程序中调用该方法,它将返回正确的值。如果我在ASP.NET web应用程序中调用它,它将返回另一个(错误的)值,这是我在系统属性或Windows注册表中找不到的 我的ASP.NET应用程序正在本地IIS下运行,并且AppPool标识设置为我的用户(与运行控制台应用程序相同) 为

我在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
(该源代码“显然”不可用)的调用

我错过了什么

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

那么什么是GetEnvironmentVariable的“源”

流程环境变量是从父流程加载的,因此我检查了w3wp.exe流程层次结构。具体如下:

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

wininit、服务和svchost作为系统运行


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

我相信您更改了
的“路径”
,并且没有重新启动IIS<代码>环境。GetEnvironmentVariable将返回当前进程的值。如果当前进程尚未重新启动,则不会看到修改后的值

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


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

我相信您更改了
“路径”
,并且没有重新启动IIS<代码>环境。GetEnvironmentVariable将返回当前进程的值。如果当前进程尚未重新启动,则不会看到修改后的值

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


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

对不起,我忘了提到我没有运行
SetEnvironmentVariable
方法。我还尝试了
AppPool
recycle、kill
w3wp.exe
进程和
iisreset
,但
GetEnvironmentVariable
仍然返回错误的值。我还尝试重新启动PC…@codroipo,奇怪,转到命令提示符并键入
Path
,查看您得到的结果,可能是值设置不正确。确保操作系统中的实际路径值是您在命令提示符下运行的
Path
返回的正确值(我在控制台应用程序中得到的值)在比较了每一个案例之后,我注意到命令提示符中返回的
路径与控制台应用程序中得到的路径相差一个字符(但基本上是不同的)。这意味着什么?@Codriopo,这个角色可能会以分号结尾,这将被忽略,别担心。确保在ASP.Net应用程序中没有任何对
SetEnvironmentVariable
的调用。进行代码搜索。这看起来真的很奇怪。对不起,我忘了提到我没有运行
SetEnvironmentVariable
方法。我还尝试了
AppPool
recycle、kill
w3wp.exe
进程和
iisreset
,但
GetEnvironmentVariable
仍然返回错误的值。我还尝试重新启动PC…@codroipo,奇怪,转到命令提示符并键入
Path
,查看您得到的结果,可能是值设置不正确。确保操作系统中的实际路径值是您在命令提示符下运行的
Path
返回的正确值(我在控制台应用程序中得到的值)在比较了每一个案例之后,我注意到命令提示符中返回的
路径与控制台应用程序中得到的路径相差一个字符(但基本上是不同的)。这意味着什么?@Codriopo,这个角色可能会以分号结尾,这将被忽略,别担心。确保在ASP.Net应用程序中没有任何对
SetEnvironmentVariable
的调用。进行代码搜索。这似乎真的很奇怪。我恳请你澄清你所说的“错误的价值观”是什么意思;可能它返回的是用户/流程上下文的环境,而不是您所预测的环境。你能详细解释一下为什么你认为它是“错误的”吗?@DavidW的“错误”是指配置的值不同(与系统属性不同),但在最新的更新之后,似乎即使我在控制台应用程序中获得的值也与这些值不同。我恳请澄清你所说的“错误值”是什么意思环境就是环境;可能它返回的是用户/流程上下文的环境,而不是您所预测的环境。你能解释一下为什么你认为它是“错误的”吗?@DavidW的“错误”我的意思是,它的配置值不同(与系统属性不同),但在最新的更新之后,它