Windows 8:应用程序无法写入C:\ ProgramData \

时间:2013-09-30 12:22:03

标签: c++ windows winapi windows-8

我正在Windows 8上移植我的应用程序。程序使用路径

C:\ ProgramData \ MyProgramName \

用于存储备份。 它在Windows 7上运行良好,但在Windows 8上运行它时会出现“拒绝访问”。

存储程序备份的正确方式和地点(与任何特定用户无关)是什么?

2 个答案:

答案 0 :(得分:5)

我看到许多程序将其非用户相关的应用程序数据存储在公共应用程序文件夹中。好的,实际上他们所做的是在公共应用程序文件夹中创建一个文件夹来存储他们的数据。

要获取公共应用程序文件夹的路径,可以使用CSIDL_COMMON_APPDATA作为文件夹ID调用SHGetFolderPath函数。如果不必支持Windows Vista之前的任何内容,则可以改为调用SHGetKnownFolderPath函数,并将FOLDERID_ProgramData作为已知文件夹ID传递。

啊!我不知道普通应用程序文件夹是普通用户不可写的。幸运的是,似乎有一个推荐的解决方案。请参阅MSDN上的这篇文章Data and Settings Management,其中声明了以下内容“如果应用程序要求普通用户具有对CSIDL_COMMON_APPDATA的特定于应用程序的子目录的写访问权限,则应用程序必须在应用程序设置期间显式修改该子目录的安全性修改后的安全性必须记录在供应商问卷中。“

答案 1 :(得分:4)

C:\ProgramData具有阻止标准用户在那里写作的安全设置。这在Windows 8中并不新鲜,Windows 7也是如此,Vista上的等效文件夹也以这种方式得到保护。也许您的Windows 7环境已禁用UAC,或者您已安全C:\ProgramDataC:\ProgramData\MyProgramName以允许对标准用户进行写访问。

使用此文件夹有两种方法。某些应用程序仅在安装期间写入,同时安装程序进程正在升级。然后,作为标准用户运行的应用程序本身可以读取,但从不尝试写入。

另一种方法是安装程序创建一个C:\ProgramData的子文件夹,该文件夹受到保护,允许标准用户或开发人员认为合适的任何用户/组进行写访问。