簡體   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