2010-12-07 4 views
5

Ich versuche, ein Befehlszeilenprogramm zu schreiben, das IIS7.5 auf Windows Server 2008 Schreibzugriff auf einen Ordner in der Wwwroot geben wird, so dass eine Webanwendung Zugriff auf einen bestimmten Ordner in seinem Basisverzeichnis zu schreiben hat . Zuvor würden Sie dies tun, indem Sie der Gruppe IIS_WPG den Ordner zuweisen, der dieser Gruppe Zugriff ändern gewährt.C# -Code, um automatisch IIS Schreibzugriff auf einen Ordner unter Windows Server 2008 zu geben? Derzeit wirft Ausnahme

In Server 2008 versuche ich, das gleiche mit IIS_IUSRS zu tun, aber eine Ausnahme tritt auf. Hier

ist der Code:

private static void ManagePermissions(string directory, string account, FileSystemRights rights, AccessControlType controlType, bool addAccess) 
{ 
    DirectoryInfo directoryInfo = new DirectoryInfo(directory); 
    DirectorySecurity directorySecurity = directoryInfo.GetAccessControl(); 

    if (addAccess) 
     directorySecurity.AddAccessRule(
      new FileSystemAccessRule(account, rights, controlType)); 
    else 
     directorySecurity.RemoveAccessRule(
      new FileSystemAccessRule(account, rights, controlType)); 

    directoryInfo.SetAccessControl(directorySecurity); 
} 

Der Aufruf dieser Methode ist wie folgt:

ManagePermissions(
        "c:\inetpub\wwwroot", 
        "MACHINENAME\IIS_IUSRS", 
        FileSystemRights.Modify, 
        AccessControlType.Allow, 
        true); 

Wenn ausführen diesen Anruf zu ManagePermissions eine Ausnahme mit der folgenden Art und Meldung ausgelöst wird:

Ich habe mehrmals überprüft, um sicherzustellen, dass MACHINENAME \ IIS_IUSRS ein ist n genaue Übereinstimmung mit dem Benutzer im lokalen Benutzermanager auf der Maschine, auf der dieser Code ausgeführt wird. Dieser Computer nimmt nicht an einer Windows-Domäne teil.

Lassen Sie mich wissen, wenn Sie weitere Informationen benötigen.

+1

Und diese Rechte zuweisen Anwendung wird unter einem Benutzerkonto ausgeführt, das bereits Zugriff auf solche Rechte bietet? –

+0

Ja. Diese Anwendung führt eine Reihe von Dingen wie Admin IIS durch, erstellt neue Ordner und kopiert Dateien in dieselben Verzeichnispfade. –

Antwort

4

IIS_IUSRS ist eine integrierte Gruppe, daher sollte sie nicht mit [machinename]\IIS_IUSRS sondern mit BUILTIN\IIS_IUSRS referenziert werden. Wie so:

ManagePermissions( 
        "c:\inetpub\wwwroot", 
        "BUILTIN\IIS_IUSRS", 
        FileSystemRights.Modify, 
        AccessControlType.Allow, 
        true); 

Um zu dieser Weise der Referenzierung des Benutzers zu wechseln, reparierte meinen Code. Ich bekomme das Konto auf eine etwas andere Art und Weise als in Ihrem Beispiel verwiesen:

IdentityReference user = new NTAccount(UserDomain + @"\" + UserName); 

Und es dann über einen anderen Konstruktor verwenden, so dass die Übersetzung als auch beeinflussen können, aber ich bezweifle es:

var rule = new FileSystemAccessRule(user, ..., ..., ..., ...); 
+0

Ich werde das in den nächsten Tagen ausprobieren und sehen, wie es geht. Ich hatte dieses Feature von meinem Projekt aufgegeben, da es einen marginalen Wert hinzufügte und so lange brauchte, um es herauszufinden. –

3

Update: Kürzlich habe ich einen Fehler beim Hinzufügen der vollständigen Kontrolle zum Benutzer IIS_IUSRS in nicht-englischen Fenstern (Windows Server 2008 R2 x64 IIS7) gesehen.

Trotzdem IIS_IUSRS nicht übersetzt wird, ‚BUILTIN‘ vor es kann ein Fehler

So verursachen, sich bewusst sein mit „BUILTIN \ IIS_IUSRS“, benutzen Sie einfach ‚IIS_IUSRS‘ statt - dessen sowohl Englisch Arbeits und nicht-englische Fenster

+0

Danke. Das hat für mich funktioniert. – br4d