Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/301.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
(C#)如何在需要修改高程的窗口中检查路径是否为受保护路径?_C#_Uac_Protected Folders - Fatal编程技术网

(C#)如何在需要修改高程的窗口中检查路径是否为受保护路径?

(C#)如何在需要修改高程的窗口中检查路径是否为受保护路径?,c#,uac,protected-folders,C#,Uac,Protected Folders,我们有一个文件夹,我们的应用程序可能会在其中读取、写入和创建/删除文件,虽然我们可以默认为安全位置,但我们允许用户选择不同的目录。我们如何检查他们选择的目录是否“安全” 我们不希望在运行时要求管理员提升,并且此路径将用于应用程序的后续启动,因此,我们仅检查我们的进程当前是否能够写入该位置是不够的,因为可能是应用程序第一次以管理员权限启动(实际上,当安装程序启动时它会启动,因为安装程序运行的是提升版)如果他们选择了一个受保护的位置,下次尝试运行应用程序时,他们将无法访问该目录。可能有GB的持久数据

我们有一个文件夹,我们的应用程序可能会在其中读取、写入和创建/删除文件,虽然我们可以默认为安全位置,但我们允许用户选择不同的目录。我们如何检查他们选择的目录是否“安全”


我们不希望在运行时要求管理员提升,并且此路径将用于应用程序的后续启动,因此,我们仅检查我们的进程当前是否能够写入该位置是不够的,因为可能是应用程序第一次以管理员权限启动(实际上,当安装程序启动时它会启动,因为安装程序运行的是提升版)如果他们选择了一个受保护的位置,下次尝试运行应用程序时,他们将无法访问该目录。可能有GB的持久数据存储在此位置,因此请求新位置并移动文件不是理想的解决方案。

由于任何文件夹都可以按管理员认为合适的方式设置权限,因此唯一真正的方法是知道它将作为什么用户运行(当前登录的用户?)然后进行访问检查,查看该用户是否具有对该目录的适当访问权限。

不仅任何文件夹都可以拥有任何权限,而且它们可以随时更改,包括在您检查文件和使用文件之间。因此,实际上,您唯一能做的就是使用文件并在文件失败时处理异常。

她关于随时更改权限的建议是有效的,但在安装时检查仍然比根本不检查要好

由于第一次运行将被提升,您可能需要执行的是启动一个单独的非提升进程来测试该位置,然后原始实例可以继续运行,知道该位置将工作,除非/直到其他人更改权限