繁体   English   中英

Windows 工作器服务文件夹权限 (C#)

[英]Windows Worker Service Folder Permissions (C#)

快速提问是否有人碰巧知道。 我正在开发 dotnet6 中的 Worker 应用程序,该应用程序旨在成为服务,我需要在某处存储 json 文件。 做一些研究,似乎 CommonApplicationData(ex: "C:/ProgramData") 是 go 的地方。 我的问题是,我似乎无法将文件写入该文件夹。 我能够创建一个目录就好了。 但是我的访问权限被拒绝创建实际文件。

该服务目前将在现场服务器上使用,无法回答 UAC 提示。 我不确定还能做什么。 我可以手动创建文件并访问、编辑它。 这似乎工作正常。 但我想动态创建一个日志文件等等。

这是代码(“它非常基本”)

    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); //<- directory is created just fine
        using var file = File.Create(dirPath); // <- fails here (access is denied)
        //do stuff
    }

这段代码对我有用。 这确实是正在创建的目录的权限问题。

  public static bool CreateDirWithAccess(string fullPath, bool readOnly)
{
    var dInfo = Directory.CreateDirectory(fullPath);
    DirectorySecurity dSecurity = dInfo.GetAccessControl();
    dSecurity.AddAccessRule(new FileSystemAccessRule(new SecurityIdentifier(WellKnownSidType.WorldSid, null), readOnly ? FileSystemRights.Read : FileSystemRights.FullControl, InheritanceFlags.ObjectInherit | InheritanceFlags.ContainerInherit, PropagationFlags.NoPropagateInherit, AccessControlType.Allow));
    dInfo.SetAccessControl(dSecurity);
    return true;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM