如何通过Windows服务更改文件夹/文件权限
本文关键字:文件夹 文件 权限 何通过 Windows 服务 | 更新日期: 2023-09-27 17:56:36
>我编写了一个文件转换器,它将dwfx文件转换为tiff格式。它有两种操作方式。首先是手动转换,用户选择输入文件夹和输出文件夹,即使目标或源文件夹具有只读属性,文件也会被转换。其次是通过服务运行,其中转换作为服务进行。我在这里面临的问题是,每当我执行与服务相同的过程时,它都会显示只读文件拒绝访问。我尝试通过代码删除或更改属性,但它显示system.unauthorized access exception
.我还尝试使应用程序成为完全信任的应用程序,因此将 app.manifest 添加到其中,但事件日志仍显示相同的错误。我以具有管理员权限的本地帐户运行该服务。我不知道该怎么办。
我的代码是
private bool GetFolderAccess(string sDirectory)
{
try
{
//Commented lines are for changing the permission when the exception is thrown everytime.
/*DirectoryInfo info = new DirectoryInfo(sDirectory);
WindowsIdentity self = System.Security.Principal.WindowsIdentity.GetCurrent();
DirectorySecurity ds = info.GetAccessControl();
ds.AddAccessRule(new FileSystemAccessRule(self.Name,FileSystemRights.FullControl,InheritanceFlags.ObjectInherit |InheritanceFlags.ContainerInherit,PropagationFlags.None,AccessControlType.Allow));
info.SetAccessControl(ds); */
FileStream fs = new FileStream(sDirectory + "testfile.txt", FileMode.OpenOrCreate, FileAccess.ReadWrite);
StreamWriter s = new StreamWriter(fs);
s.Dispose();
File.Delete(sDirectory + "''testfile.txt");
return true;
}
catch (Exception ex)
{
eventLog1.WriteEntry(ex.ToString());
return false;
}
}
请告诉我该怎么做。任何帮助,不胜感激。谢谢
您可以使用 File.SetAttribute 方法并给出各种 FileAttributes。您也可以使用 GetAccessControl。
下面是一个示例:
public static bool HasWritePermissionOnDir(string path)
{
var writeAllow = false;
var writeDeny = false;
var accessControlList = Directory.GetAccessControl(path);
if (accessControlList == null)
return false;
var accessRules = accessControlList.GetAccessRules(true, true,
typeof(System.Security.Principal.SecurityIdentifier));
if (accessRules ==null)
return false;
foreach (FileSystemAccessRule rule in accessRules)
{
if ((FileSystemRights.Write & rule.FileSystemRights) != FileSystemRights.Write)
continue;
if (rule.AccessControlType == AccessControlType.Allow)
writeAllow = true;
else if (rule.AccessControlType == AccessControlType.Deny)
writeDeny = true;
}
return writeAllow && !writeDeny;
}
编辑:
要更改权限:
FileAttributes attributes = File.GetAttributes(path);
if ((attributes & FileAttributes.ReadOnly) == FileAttributes.ReadOnly)
{
// Remove read only property of the file.
File.SetAttributes(file, attributes & ~FileAttributes.ReadOnly);
}
另外,尝试在管理员模式下运行您的Visual Studio。
编辑2:
您还可以使用:
FileInfo fileInfo = new FileInfo(pathToAFile);
fileInfo.IsReadOnly = false;
fileInfo.Refresh();