Ich möchte, dass meine MVC3-Webanwendung auf% APPDATA% (z. B. C:\Users\MyUsername\AppData\Roaming
unter Windows 7) zugreift, da ich dort Konfigurationsdateien speichern kann. Daher habe ich einen Anwendungspool in IIS mit der Identität des Benutzers "MyUsername" erstellt, das Profil dieses Benutzers erstellt, indem ich mich mit dem Konto anmeldete, und die Option "Load User Profile" aktiviert (war sowieso immer "True"). Identitätswechsel ist deaktiviert.
Jetzt habe ich das Problem, dass% APPDATA% (in C #):
%Vor% wird in c:\windows\system32\inetsrv
anstelle von C:\Users\MyUsername\AppData\Roaming
aufgelöst.
UPDATE: Genauer gesagt gibt der obige C # -Code eine leere Zeichenfolge zurück, so dass Path.GetFullPath(Path.Combine(appdataDir, "MyAppName"))
den aktuellen Pfad zu meinem Anwendungsnamen voranstellt, was in c:\windows\system32\inetsrv\MyAppName
resultiert.
Ich weiß, dass ich dies bereits mit der gleichen Webanwendung auf einem Windows Server 2008 R2 gemacht habe, und jetzt bekomme ich dieses Problem mit der gleichen Hauptversion 7.5 von IIS auf meinem Windows 7.
Ich habe die gleiche Prozedur wie zuvor verwendet: Einen neuen Benutzer erstellt, der sich als dieser Benutzer angemeldet hat, um die Profil- und APPDATA-Verzeichnisse zu erstellen, dann den Anwendungspool mit dieser Identität hinzugefügt und schließlich die Webanwendung diesem Pool hinzugefügt.
Irgendwelche Ideen?
Öffnen Sie Ihre %WINDIR%\System32\inetsrv\config\applicationHost.config
und suchen Sie nach <applicationPoolDefaults>
. Stellen Sie unter <processModel>
sicher, dass Sie setProfileEnvironment="false"
nicht haben. Wenn Sie dies tun, setzen Sie es auf wahr.
Anwendungspools - Ihr Anwendungspool - Erweiterte Einstellungen ...
Prozessmodell - Benutzerprofil laden True gesetzt.
Es hilft mir.
Aus genommen Ссылка
Ich habe das gleiche Problem. Haben Sie zufällig die Betaversion von Visual Studio 11 installiert? Ich habe kürzlich, und ich habe bemerkt, ein paar Unterschiede in wie die 4.0 kompatiblen .dlls für das mit unserem Code arbeiten. Ich versuche immer noch, das Problem sicher zu finden, aber ich hatte dieses Problem vorher nicht.
Bearbeiten:
Nach dem Vergleich der dekompilierten Quellen von 4.0 und 4.5 für GetFolderPath (und verwandte) gibt es Unterschiede. Ob sie die Ursache des Problems sind ... Ich bin mir noch nicht sicher.
Bearbeiten 2: Hier sind die relevanten Änderungen. Ich arbeite daran, beide zu sehen, ob ich andere Ergebnisse bekomme. [Code entfernt]
Bearbeiten 3:
Ich habe jetzt versucht, SHGetFolderPath direkt aufzurufen, was das .NET Framework sowieso macht. Es gibt E_ACCESSDENIED (-2147024891 / 0x80070005) zurück. Ich weiß nicht, was sich in bestimmten Fällen geändert hat, wo ich das bekomme, aber nicht in anderen.
Bearbeiten 4:
Da Sie eine leere Zeichenfolge erhalten, möchten Sie möglicherweise Ihren Code so ändern, dass er SHGetFolderPath verwendet, damit Sie das HResult abrufen und zumindest wissen können, was genau passiert.
%Vor%Das Problem liegt in Ihren IIS-Einstellungen. Die Antwort lautet hier: Environment.GetFolderPath (Environment.SpecialFolder.ApplicationData) gibt String.Empty
zurückIch habe kürzlich das gleiche Problem erlebt. Wie von Amit erwähnt, ist das Problem, dass das Benutzerprofil nicht geladen ist. Die Einstellung gilt für alle Anwendungspools und befindet sich in der AnwendungHost.config (normalerweise C: \ Windows \ System32 \ inetsrv \ config \ applicationHost.config). Wenn Sie die applicationPoolDefaults Elemente wie folgt aktualisieren, wird es funktionieren;
%Vor%Wir haben das mit IIS 7.5 ausprobiert und es ohne Probleme in die Produktion geschafft.
Sie können dies automatisieren, wenn Sie möchten;
%Vor%oder wenn Sie Powershell bevorzugen
%Vor%Hoffe, das hilft
Tags und Links iis-7.5 iis appdata application-pool applicationpoolidentity