绕过程序文件文件夹的Windows权限限制

use*_*744 3 c windows security file-permissions

我在C中做了一个小应用程序.它做了一些文件操作,基本上搜索并更改了一些文件名.但如果它在程序文件文件夹中的Win Vista/7中使用,程序会说权限被拒绝.反正有没有绕过这个?

此外,Java可以绕过这个吗?

Dea*_*ing 6

如果可以轻松绕过文件权限,则没有多大意义.

如果您编写了直接访问磁盘块的内核驱动程序,则可以绕过它们,但无论如何您都需要成为管理员才能安装内核驱动程序.

在一天结束时,"绕过"文件权限的唯一方法是以管理员身份运行程序.


adf*_*f88 6

不要绕过,使用"Application Data"目录.

Program Files用于存储在应用程序运行期间不会更改的文件.存储在那里的文件只应在安装/更新期间更改.

应用程序运行期间要更改的文件(配置文件,设置等)应存储在用户文件夹中的"应用程序数据"目录中.

要获取路径,请使用SHGetFolderPath函数传递:
CSIDL_APPDATA- 获取当前用户"Application Data"目录
CSIDL_COMMON_APPDATA- 获取所有用户"Application Data"目录
(并最终)CSIDL_LOCAL_APPDATA- 获取当前用户"Local Application Data"目录,该目录用于存储信息仅适用于无法移动到其他计算机的本地计算机,与"应用程序数据"(也称为"漫游应用程序数据")相对,其中文件可以在一台机器之间自由移动(即您可以在重新安装操作系统期间保留它们).

如果您的应用程序确实需要更改Program Files目录,那么询问用户是否允许您应该执行的操作.您可以为应用程序提供特殊清单,以便每次运行时都尝试获取管理员权限.您还可以即时获得权限.

如果您正在编写几乎不会干扰操作系统的特定应用程序,那么您可以创建一个服务(守护程序).每次启动服务时,它都将获得服务注册期间给出的权限.有关详细信息,请参阅MSDN上的"DLL,进程和线程 - >服务"

//编辑
你也可以在.NET中轻松创建一个服务(C#是最合适的).服务应用程序可以与使用其他语言编写的客户端应用程 但是要注册服务,您需要管理员权限.有了这种应用程序,您必须考虑所有安全问题.