我有一个用C ++编写的软件安装在大约1000台PC上,这对Windows UAC有一些困难。我正在努力使事情正常运行,但我需要一些帮助来理解问题并找到正确的解决方案。
情况如下:我需要在一些text / xml文件中写一些数据,所以我开始(在XP中)将它们写在可执行文件夹中。不推荐,我知道。当Vista启动时,所有文件都开始保存到VirtualStore文件夹,这对我来说很好,所以我保持原样不变。当时我和一些用户遇到了一些问题(参见问题1),但我手动修复了它们就是这样。现在使用Windows 8我遇到了不同的问题(问题2),我想一劳永逸地修复它们。
现在我想解决问题。我的计划是移动CSIDL_LOCAL_APPDATA中需要修改的所有文件,并让软件在那里保存。只有可执行文件才会出现在程序文件夹中。但是为了向后兼容,似乎我不能使用似乎是Vista +特定的SHGetKnownFolderPath。所以我会使用SHGetFolderPath,我已经弃用了,但我应该在XP中工作,并在Vista +中充当SHGetKnownFolderPath的包装器,这对我有好处。
我的问题:
非常感谢您提供的任何帮助。 卢卡
答案 0 :(得分:0)
这些是我对问题的看法1& 2: 1.如果您正在编写应用程序正在使用的文件,则您的文件将写入C:\ Program Files的子目录中。要在此位置(C:\ Program Files)写入文件,您的应用程序必须以管理员身份运行。出于兼容性原因,如果您尝试将数据写入需要管理员权限来写入数据的目录,则Windows Vista会将数据写入VirtualStore。 2. Windows 8不再使用VirtualStore。但是,读访问权限不需要管理员权限。 是的,您的计划符合UAC标准。您的程序和程序使用的文件必须保存在两个不同的目录中。 我将使用ShGetFolderPath函数来获取AppData目录的路径。此外,此功能与Windows XP兼容。您可以检查操作系统版本并使用适用于此版本的功能/接口。在Windows 8中更改了GetVersion和GetVersionEx。这就是为什么我建议在Windows 8上使用Version Helper functions进行版本检查。