es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Permisos de Carpeta de Servicio de Trabajador de Windows (C#)

Pregunta rápida si alguien sabe. Estoy trabajando en una aplicación de Worker en dotnet6 que se supone que se convertirá en un servicio y necesito almacenar un archivo json en algún lugar. Después de investigar, parece que CommonApplicationData (por ejemplo: “C:/ProgramData”) es el lugar indicado. Mi pregunta es, no puedo escribir un archivo en esa carpeta. Soy capaz de crear un directorio sin problemas, pero se me niega el acceso a crear un archivo real.

Este servicio se usará en servidores en el campo en este momento y no puede responder a las solicitudes de permiso de UAC. No estoy seguro de qué más hacer. Puedo crear el archivo manualmente y acceder y editarlo. Eso parece funcionar bien. Pero me gustaría tener archivos de registro creados dinámicamente y más.

Aquí está el código (“es bastante básico”):

 var dirPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData), "MyServerService");
var path = dirPath + "\\service.json";

var doesDirExist = Directory.Exists(dirPath);
var doesFileExist = File.Exists(path);
if (!doesDirExist || !doesFileExist)
{
    Directory.CreateDirectory(dirPath); //<- el directorio se crea bien
    using var file = File.Create(dirPath); // <- falla aquí (el acceso se deniega)
    //hacer cosas
}
Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Parece que el usuario que ejecuta la aplicación de Trabajador no tiene suficientes permisos para escribir en la carpeta CommonApplicationData. Dado que esta aplicación se utilizará en servidores en el campo sin la capacidad de responder a las solicitudes UAC, existen algunas soluciones potenciales.

    Una opción podría ser cambiar los permisos en la carpeta CommonApplicationData para otorgar el acceso adecuado al usuario que ejecuta la aplicación de Trabajador. Sin embargo, esto puede no ser factible o deseable dependiendo de los requisitos y limitaciones de seguridad del entorno del servidor.

    Otra opción podría ser almacenar el archivo json en otro lugar donde el usuario que ejecuta la aplicación tenga permisos de escritura. Esto podría ser un directorio personalizado creado específicamente para este propósito, o un subdirectorio de un directorio existente al que el usuario tenga acceso de escritura.

    Finalmente, si la creación manual del archivo es una solución aceptable, otra opción podría ser que la aplicación de Trabajador genere un archivo de registro que incluya la información que se habría almacenado en el archivo json. Luego, este archivo de registro podría ser procesado manualmente para extraer los datos necesarios.

Comments are closed.