4 Stimmen

NetworkService-Erlaubnis (mehrsprachig)

Also, ich mache ein Setup-Projekt, alles in VB.NET geschrieben, und ich muss dem NetworkService-Konto, Berechtigung auf einen bestimmten Ordner geben.

Der folgende Code funktioniert perfekt (Windows 7 - en-US):

Dim dInfo As New DirectoryInfo("C:\FolderOrFileToGivePermission")
Dim dSecurity As DirectorySecurity = dInfo.GetAccessControl()
dSecurity.AddAccessRule(New FileSystemAccessRule("NETWORK SERVICE", FileSystemRights.FullControl, AccessControlType.Allow))
dInfo.SetAccessControl(dSecurity)

Das Problem begann, als ich den gleichen Code auf meinem Windows 7, Vista oder XP ( alle in PT-BR ), habe ich festgestellt, dass es keinen "NETZWERKDIENST" gibt, die richtige Bezeichnung ist "Serviço de Rede".

Ich muss diesen Namen erhalten, um dem richtigen Benutzer die Erlaubnis zu erteilen.

Nach vielen Nachforschungen auf allen 3 Betriebssystemen habe ich herausgefunden, dass die ID des Benutzers "S-1-5-20" ist, sein Pfad in der Registrierung lautet: Computer \HKEY_USERS\S -1-5-20 und den Standardordner dafür: C:\Windows\ServiceProfiles\NetworkService

Aber ich habe immer noch nicht den eigentlichen "lokalisierbaren" Namen gefunden, und er muss dynamisch sein, da dieses System in vielen verschiedenen Ländern installiert werden wird (unterschiedliche Maschinen und Kulturen).

Vielen Dank im Voraus.

6voto

Joe Daley Punkte 43258

Verwenden Sie die System.Security.Principal.WellKnownSidType Aufzählung:

SecurityIdentifier networkService = new SecurityIdentifier(
    WellKnownSidType.NetworkServiceSid, null);

FileSystemAccessRule rule = new FileSystemAccessRule(
    networkService, FileSystemRights.FullControl, AccessControlType.Allow);

1voto

Izzy Rodriguez Punkte 1799

Also, nach mehr und mehr Forschung, habe ich meine Suche über Google und Stackoverflow geändert, und ich habe die Antwort auf eine andere Frage gefunden:

Wie kann man den angezeigten Benutzernamen am besten nach SID auflösen?

Dim NetworkServiceName as String = new SecurityIdentifier("S-1-5-20").Translate(typeof(NTAccount)).ToString();

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X