Naylor 发表于 2023-1-3 15:54

C#给文件夹赋予权限

# 遇到的问题
在使用WPF开发桌面EXE的过程中,遇到了Webview2无法往C盘写入文件的问题

# 解决思路
* 程序启动的时候使用代码给文件夹赋予高权限
*Webview2指定UDF

# 实践
> 本文讨论思路1的实现

C# 给文件夹赋权限

~~~

   private void InitWebView2DirAccess()
      {
            try
            {
                string path = AppDomain.CurrentDomain.BaseDirectory;
                string webview2DataDir = path + "WpfApp1.exe.WebView2";
                Log.LogInfo.Info("InitWebView2DirAccess-webview2DataDir=" + webview2DataDir);
                bool isModified = false;
                DirectoryInfo dir2 = new DirectoryInfo(webview2DataDir);
                //所有访问权限
                System.Security.AccessControl.DirectorySecurity dirSecurity = dir2.GetAccessControl(AccessControlSections.All);
                //文件ACL继承
                InheritanceFlags inherits = InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit;
                //追加Eereryone用户组完全控制权限
                FileSystemAccessRule everyoneFileSystemAccessRule = new FileSystemAccessRule("Everyone", FileSystemRights.FullControl, inherits, PropagationFlags.None, AccessControlType.Allow);
                //追加Users用户组完全控制权限
                FileSystemAccessRule usersFileSystemAccessRule = new FileSystemAccessRule("Users", FileSystemRights.FullControl, inherits, PropagationFlags.None, AccessControlType.Allow);

                dirSecurity.ModifyAccessRule(AccessControlModification.Add, everyoneFileSystemAccessRule, out isModified);
                Log.LogInfo.Info("isModified-1=" + isModified);
                dirSecurity.ModifyAccessRule(AccessControlModification.Add, usersFileSystemAccessRule, out isModified);
                Log.LogInfo.Info("isModified-2=" + isModified);
                //设置访问权限
                dir2.SetAccessControl(dirSecurity);
                Log.LogInfo.Info("InitWebView2DirAccess-success");

            }
            catch (Exception ex)
            {
                Log.LogError.ErrorFormat(@"InitWebView2DirAccess-error:msg={0};堆栈={1}", ex.Message, ex.StackTrace);
            }
      }

~~~

lizf2019 发表于 2023-1-3 21:35

直接设置管理员身份运行可以吗?

Naylor 发表于 2023-1-4 09:31

lizf2019 发表于 2023-1-3 21:35
直接设置管理员身份运行可以吗?

1:设置管理员运行也无法解决webview2这个控件无法写入文件的问题,因为安装在c盘,安装在其他盘符没有这个问题。
2:wpf程序设置管理员运行需要编写程序清单文件,app.manifest

liangxinbeilang 发表于 2023-1-10 11:00

感谢支持

Naylor 发表于 2023-1-10 17:30

skyff1 发表于 2023-1-10 10:27
这样子搞会被杀毒软件误杀吧

不会,如果有修改注册表之类得操作,360之类得就报

lene 发表于 2023-1-13 17:53

支持一波,不过描述感觉怪怪的,与其说给文件夹赋予最高权限,应该是允许普通用户也可以完全控制/访问文件夹。

Naylor 发表于 2023-1-13 18:06

lene 发表于 2023-1-13 17:53
支持一波,不过描述感觉怪怪的,与其说给文件夹赋予最高权限,应该是允许普通用户也可以完全控制/访问文件 ...

对的,最近项目紧张,不懂技术的领导天天在后面催,文章写的有点糙了,没有花时间打磨
页: [1]
查看完整版本: C#给文件夹赋予权限