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
直接设置管理员身份运行可以吗?
1:设置管理员运行也无法解决webview2这个控件无法写入文件的问题,因为安装在c盘,安装在其他盘符没有这个问题。
2:wpf程序设置管理员运行需要编写程序清单文件,app.manifest 感谢支持 skyff1 发表于 2023-1-10 10:27
这样子搞会被杀毒软件误杀吧
不会,如果有修改注册表之类得操作,360之类得就报 支持一波,不过描述感觉怪怪的,与其说给文件夹赋予最高权限,应该是允许普通用户也可以完全控制/访问文件夹。 lene 发表于 2023-1-13 17:53
支持一波,不过描述感觉怪怪的,与其说给文件夹赋予最高权限,应该是允许普通用户也可以完全控制/访问文件 ...
对的,最近项目紧张,不懂技术的领导天天在后面催,文章写的有点糙了,没有花时间打磨
页:
[1]