2016-03-22 11 views
0

ASP.NET Webアプリケーションで実行されているOracleクライアントに問題があります。いくつかのチェックの後、私は問題がEnvironment.GetEnvironmentVariable("Path")が間違った値を返すという事実であることが分かった。Environment.GetEnvironmentVariable( "Path")がASP.NETで異なる値を返します

コンソールアプリケーションでメソッドを呼び出すと、正しい値が返されます。ASP.NET WebAppで呼び出すと、別の(間違った)値が返され、システムプロパティまたはWindowsレジストリ。

私のASP.NETアプリケーションはローカルIISで実行されており、AppPoolのIDはユーザー(コンソールアプリケーションを実行するユーザー)に設定されています。私はGetEnvironmentVariableのソースコードを見てみましたが、それは基本的

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

:私は2つのアプリケーション上で次のプロパティをチェックし、値が同じであることを確認する Win32メソッドGetEnvironmentVariable(このソースコードは「明らかに利用できません」)への呼び出しをラップします。

私には何が欠けていますか?

おかげ

更新

いくつかチェックした後、私はコンソールアプリケーションで取得しても値が、私はそこに見つけたものによって異なっていることに気づい: System Properties

だから何ですGetEnvironmentVariableの "source"?

アップデート2

Microsoft saysプロセスの環境変数は親プロセスからロードされているので、私はw3wp.exeのプロセス階層をチェックしていること。 > SERVICES.EXE - - >にsvchost.exe - SYSTEMとして実行> w3wp.exeの

wininit、サービスとのsvchost

WININIT.EXE:それは次のようです。

wininitとservicesパス環境変数には、システムプロパティ(「システム環境変数」)に記載されている値が含まれています。 svchostは別の値を持っているので、コンソールアプリケーションで取得した値とASP.NET Web Appで取得した値の差の原因は(おそらく)svchostがこの値を編集するという事実です。

+0

を実行することができます。"環境は環境であり、おそらくあなたが予測しているもの以外のユーザー/プロセスコンテキストのために環境を返すでしょう。なぜあなたはそれが「間違っている」と思うのかを広げることができますか? –

+0

@DavidW「間違った」I (システムのプロパティから)設定された値によって異なることを意味しますが、最新のアップデート後には、コンソールアプリケーションで取得された値さえもこれらの値によって異なるようです。 –

答えて

0

"Path"を変更してIISを再起動していないと思います。 Environment.GetEnvironmentVariableは現在のプロセスの値を返します。現在のプロセスが再起動していない場合、変更された値は表示されません。

したがって、IISを再起動して、値を取得します。

あなたは、私は丁重に間違った値」によって何を意味するかを明確に要求するGUIでプロセスを再起動するか、コマンドプロンプトに移動し、iisreset

+0

申し訳ありませんが、私は実行しなかった'SetEnvironmentVariable'メソッド。私も' AppPool'リサイクルを試みました、 'w3wp.exe'プロセスと' iisreset'を殺しましたが、 'GetEnvironmentVariable'は間違った値を返しています。 –

+0

@codroipo、strange 、コマンドプロンプトに移動し、 'Path'と打ち込んで、何が得られるかを確認してください。値が正しく設定されていない可能性があります。オペレーティングシステムの実際のPathの値が、あなたが探しているものであることを確認してください。 – Habib

+0

コマンドプロンプトで 'Path'を実行すると、正しい値(コンソールアプリケーションで取得した値)が返されます。 –

関連する問題