Pregunta

Estoy creando un servicio de Windows con el que quiero usar NLOG. Quiero que los registros se escriban en la ubicación de instalación del servicio, digan algo como:

PathToInstalledService\Logs\MyLog.txt

Por supuesto, esto requerirá privilegios del administrador. Entonces, mi pregunta es, al crear la instalación para el servicio, qué cuenta debo usar en ServiceProcessInstaller. Actualmente he estado usando LocalService, pero esta cuenta no tiene la elevación requerida.

Gracias.

¿Fue útil?

Solución

Durante la instalación, debe cambiar los permisos del directorio de 'registros' para permitir que su cuenta de servicio escriba archivos. Use la cuenta con los menos privilegios necesarios para realizar su función de servicios, generalmente la cuenta de servicio de red.

Puede hacer esto desde una clase de instalación en el servicio:

    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);
    }
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top