Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.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
Security Windows 7安全策略:如何允许我的.NET应用程序写入驱动器;C:“是吗?”;?_Security_Windows 7_Acl - Fatal编程技术网

Security Windows 7安全策略:如何允许我的.NET应用程序写入驱动器;C:“是吗?”;?

Security Windows 7安全策略:如何允许我的.NET应用程序写入驱动器;C:“是吗?”;?,security,windows-7,acl,Security,Windows 7,Acl,我的应用程序不应该执行任何管理任务,所以我希望普通用户帐户能够运行它。唯一的问题是,我的应用程序读取和写入数据库文件;如果运行Windows 7(或Vista)的用户在驱动器C中安装我的应用程序,则驱动器的默认权限集配置不允许我的应用程序写入数据 如何允许我的应用程序写入C:,而不需要完全的管理权限?默认情况下,用户应该具有驱动C:的写入权限,如果没有,则需要将读取和写入的目录更改为执行目录(C:/Program Files/Your app/),而不是C: 你可以通过 String Path

我的应用程序不应该执行任何管理任务,所以我希望普通用户帐户能够运行它。唯一的问题是,我的应用程序读取和写入数据库文件;如果运行Windows 7(或Vista)的用户在驱动器C中安装我的应用程序,则驱动器的默认权限集配置不允许我的应用程序写入数据


如何允许我的应用程序写入C:,而不需要完全的管理权限?

默认情况下,用户应该具有驱动C:的写入权限,如果没有,则需要将读取和写入的目录更改为执行目录(C:/Program Files/Your app/),而不是C:

你可以通过

String Path = Path.GetDirectoryName(Application.ExecutablePath);

如果数据库文件在安装时存在,您可以在安装过程中授予用户对该文件的写访问权限(默认情况下,普通用户没有此权限)。如果文件需要由程序创建,则运行程序的用户需要在c驱动器上具有修改权限,这不是我的建议。

我建议将db文件存储在文档和设置/App data/your App/目录中。它的存在就是为了这个目的。写入C:/Program文件不是很好的做法。如果在您的情况下可能的话,也就是说。

我决定在安装过程中修改目录权限,因此我创建了一个.exe文件来更改其启动路径的权限,并允许所有用户访问该路径。我只是将该.exe文件包含在部署项目中,并创建了一个自定义操作,该操作将在安装的提交阶段运行该文件

由于安装程序在安装时要求用户具有管理权限,因此my.exe还享有管理权限,可以修改安装目录的权限

在my.exe中,我使用了一个进程实例来运行Windows附带的ACL实用程序(icacls.exe),如下所示:

ICACLS.EXE [TargetDir] /T /C /grant Users:F
(确保[TargetDir]没有以“\”结尾,否则调用将失败。)

这使所有用户都可以完全控制对目标目录的访问。 我也可以手动编写.NET代码和更改目录权限,但我有点懒

然而,您可能希望彻底检查您的环境条件,以便您所做的不会成为您环境中的安全漏洞;但这对我来说很合适


我希望这能帮助其他面临同样问题的人。

您需要打开UAC(用户帐户访问)并将安全滑块设置到底部。然后你可以访问驱动器C:就像在windows XP中一样。

+1-授予安装权限,不要让正在运行的进程直接访问驱动器C。这似乎是我的最佳方法。如何使用VS2008安装和部署项目在安装时更改权限?数据库的大小可能会影响您希望存储数据库文件的位置,将其放入安装目录可能不是一个合理的解决方案。大小无关紧要(!),因为我不希望数据库增长太多。