13

C:\Users\MyUsername\AppData\Roaming構成ファイルをそこに保存しているので、MVC3 Webアプリケーションが%APPDATA%(Windows 7など)にアクセスできるようにします。したがって、IISでユーザー「MyUsername」のIDを使用してアプリケーションプールを作成し、アカウントでログインしてそのユーザーのプロファイルを作成し、「ユーザープロファイルの読み込み」オプションをオンにしました(とにかくデフォルトでtrueでした)。なりすましはオフになっています。

今、私は%APPDATA%(C#で)という問題を抱えています:

appdataDir = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData)

c:\windows\system32\inetsrvの代わりに解決しますC:\Users\MyUsername\AppData\Roaming

更新:より正確には、上記のC#コードは空の文字列を返すためPath.GetFullPath(Path.Combine(appdataDir, "MyAppName"))、アプリケーション名の現在のパスが先頭に追加され、結果としてc:\windows\system32\inetsrv\MyAppName

以前、Windows Server 2008 R2の同じWebアプリケーションでこの作業を行ったことがわかっていますが、Windows7のIISの同じメジャーバージョン7.5でこの問題が発生しています。
以前と同じ手順を使用しました。新しいユーザー。そのユーザーとしてログインしてプロファイルとAPPDATAディレクトリを作成し、このIDでアプリケーションプールを追加し、最後にWebアプリケーションをこのプールに追加しました。

何か案は?

4

5 に答える 5

21

を開き、%WINDIR%\System32\inetsrv\config\applicationHost.configを探します<applicationPoolDefaults>。の下<processModel>に、 がないことを確認してくださいsetProfileEnvironment="false"。その場合は、true に設定します。

于 2012-12-10T17:59:35.523 に答える
0

同じ問題が発生しています。偶然、Visual Studio 11 ベータ版をインストールしましたか? 最近行ったのですが、4.0 と互換性のある .dll がコードでどのように機能するかについて、いくつかの違いがあることに気付きました。私はまだ問題を特定しようとしていますが、それ以前はこの問題はありませんでした。

編集:

GetFolderPath (および関連) の 4.0 と 4.5 の逆コンパイル ソースを比較すると、違いがあります。それらが問題の原因であるかどうか...まだわかりません。

編集2:関連する変更は次のとおりです。私は両方を試して、異なる結果が得られるかどうかを確認することに取り組んでいます。[コードを削除]

編集3:

とにかく、SHGetFolderPath を直接呼び出してみましたが、これは .NET Framework の最終的な処理です。E_ACCESSDENIED (-2147024891 / 0x80070005) を返します。特定のケースでは何が変わったのかわかりませんが、他のケースではそうではありません。

編集4:

空の文字列を取得しているため、SHGetFolderPath を使用するようにコードを切り替えて、HResult を取得し、少なくとも正確に何が起こっているかを知ることができます。

void Main() {
    Console.WriteLine( GetFolderPath( Environment.SpecialFolder.ApplicationData ) );
}

[System.Runtime.InteropServices.DllImport("shell32.dll")]
static extern int SHGetFolderPath(IntPtr hwndOwner, int nFolder, IntPtr hToken, uint dwFlags, StringBuilder pszPath);

private string GetFolderPath( Environment.SpecialFolder folder ) {
    var path = new StringBuilder( 260 );
    var hresult = SHGetFolderPath( IntPtr.Zero, (int) folder, IntPtr.Zero, 0, path );
    Console.WriteLine( hresult.ToString( "X" ) );

    return ( (object) path ).ToString( );
}
于 2012-04-23T12:40:56.070 に答える
0

問題は IIS の設定にあります。答えはここにあります: Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) は String.Empty を返します

于 2012-07-19T13:45:10.017 に答える