3

なぜ次の問題が発生するのですか?

シナリオ

  • IISがインストールされていることを確認してください
  • "notepad %WINDIR%\System32\inetsrv\config\applicationHost.config"管理者アカウントを使用して実行する

実際の結果:ファイルはメモ帳で正常に開かれます

  • 管理者アカウントのコンテキストで次のコードを実行します。

    string filePath = @"%WINDIR%\System32\inetsrv\config\applicationHost.config";
    Console.WriteLine(File.Exists(Environment.ExpandEnvironmentVariables(filePath)));
    

実際の結果:False

期待される結果:True

4

3 に答える 3

3

問題は、64 ビット OS で 32 ビット アプリケーションを実行している場合、.Net フレームワークが要求を から%WINDIR%\System32に自動的にリダイレクトすること%WINDIR%\SysWOW64です。

プロジェクトを 64 ビットを対象とするように変更すると、問題が解決します。

System32 をsysnativeに変更することで問題を解決することもできますが、アプリケーションを 32 ビット アプリのままにしておく場合に限られます。

string filePath = @"%WINDIR%\sysnative\inetsrv\config\applicationHost.config";
于 2011-12-31T20:59:51.537 に答える
2

これは、ファイル システムのリダイレクトが原因である可能性があります。AFAIK t は、32/64 ビットの不一致または低特権 (UAC) プロセスの場合に発生します。

マネージ API を使用してその動作を無効にする方法を知っています。http://msdn.microsoft.com/en-us/library/windows/desktop/aa365743(v=vs.85).aspxを使用するか、高い特権プロセスにする必要があります。

プロジェクトを 64 ビットを対象とするように変更すると、問題が解決する可能性があります。

于 2011-12-31T20:28:52.573 に答える
0

結果を再現できません。管理者のコマンド ライン プロンプトからこれを実行すると、exists = True.

string s = @"%WINDIR%/System32\inetsrv\config\applicationHost.config";
bool exists = File.Exists(Environment.ExpandEnvironmentVariables(s));
Console.WriteLine("exists = {0}", exists);

Windows Server 2008、64 ビットを実行しています。.NET 4.0。

于 2011-12-31T20:04:51.210 に答える