Domanda

Io sono la creazione di un servizio di Windows, che voglio usare NLog con. Voglio i registri da scrivere il percorso di installazione del servizio di dire qualcosa come:

PathToInstalledService\Logs\MyLog.txt

Questo è naturalmente andando richiedere priveledges amministratore. Quindi la mia domanda è, quando si crea l'installazione per il servizio, che cosa conto dovrei usare sul ServiceProcessInstaller. Ho attualmente in uso LocalService, ma questo account non ha l'elevazione richiesta.

Grazie.

È stato utile?

Soluzione

Durante l'installazione si dovrebbe cambiare i permessi della directory 'registri' per permettere al vostro account di servizio per scrivere i file. Utilizzare l'account con i privilegi minimi necessari per eseguire la funzione di servizi, in genere l'account NETWORK SERVICE.

Si può fare questo da una classe di installazione sul servizio:

    void Installer1_AfterInstall(object sender, InstallEventArgs e)
    {
        string myAssembly = Path.GetFullPath(this.Context.Parameters["assemblypath"]);
        string logPath = Path.Combine(Path.GetDirectoryName(myAssembly), "Logs");
        Directory.CreateDirectory(logPath);
        ReplacePermissions(logPath, WellKnownSidType.NetworkServiceSid, FileSystemRights.FullControl);
    }

    static void ReplacePermissions(string filepath, WellKnownSidType sidType, FileSystemRights allow)
    {
        FileSecurity sec = File.GetAccessControl(filepath);
        SecurityIdentifier sid = new SecurityIdentifier(sidType, null);
        sec.PurgeAccessRules(sid); //remove existing
        sec.AddAccessRule(new FileSystemAccessRule(sid, allow, AccessControlType.Allow));
        File.SetAccessControl(filepath, sec);
    }
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top