(C#)如何在需要修改高程的窗口中检查路径是否为受保护路径?
我们有一个文件夹,我们的应用程序可能会在其中读取、写入和创建/删除文件,虽然我们可以默认为安全位置,但我们允许用户选择不同的目录。我们如何检查他们选择的目录是否“安全”(C#)如何在需要修改高程的窗口中检查路径是否为受保护路径?,c#,uac,protected-folders,C#,Uac,Protected Folders,我们有一个文件夹,我们的应用程序可能会在其中读取、写入和创建/删除文件,虽然我们可以默认为安全位置,但我们允许用户选择不同的目录。我们如何检查他们选择的目录是否“安全” 我们不希望在运行时要求管理员提升,并且此路径将用于应用程序的后续启动,因此,我们仅检查我们的进程当前是否能够写入该位置是不够的,因为可能是应用程序第一次以管理员权限启动(实际上,当安装程序启动时它会启动,因为安装程序运行的是提升版)如果他们选择了一个受保护的位置,下次尝试运行应用程序时,他们将无法访问该目录。可能有GB的持久数据
我们不希望在运行时要求管理员提升,并且此路径将用于应用程序的后续启动,因此,我们仅检查我们的进程当前是否能够写入该位置是不够的,因为可能是应用程序第一次以管理员权限启动(实际上,当安装程序启动时它会启动,因为安装程序运行的是提升版)如果他们选择了一个受保护的位置,下次尝试运行应用程序时,他们将无法访问该目录。可能有GB的持久数据存储在此位置,因此请求新位置并移动文件不是理想的解决方案。由于任何文件夹都可以按管理员认为合适的方式设置权限,因此唯一真正的方法是知道它将作为什么用户运行(当前登录的用户?)然后进行访问检查,查看该用户是否具有对该目录的适当访问权限。不仅任何文件夹都可以拥有任何权限,而且它们可以随时更改,包括在您检查文件和使用文件之间。因此,实际上,您唯一能做的就是使用文件并在文件失败时处理异常。她关于随时更改权限的建议是有效的,但在安装时检查仍然比根本不检查要好 由于第一次运行将被提升,您可能需要执行的是启动一个单独的非提升进程来测试该位置,然后原始实例可以继续运行,知道该位置将工作,除非/直到其他人更改权限