繁体   English   中英

Windows UAC的C ++问题

[英]C++ issues with Windows UAC

我在1000台PC中安装了用C ++编写的软件,但在Windows UAC上却遇到了一些困难。 我正在尝试使事情正常运行,但是我需要一些帮助来理解问题并找到正确的解决方案。

情况如下:我需要在一些text / xml文件中写入一些数据,因此我开始(在XP中)将它们写入可执行文件文件夹中。 不推荐,我知道。 启动Vista后,所有文件都开始保存到VirtualStore文件夹,这对我来说很好,所以我没有改动。 那时,我和几个用户遇到了一些问题(请参阅问题1),但是我手动解决了问题,仅此而已。 现在使用Windows 8,我面临着不同的问题(问题2),我想一劳永逸地修复它们。

  1. 第一个问题:在Windows Vista中,碰巧有些用户最终发现他们的软件为“空”,就像刚安装时一样。 他们对此所做的所有工作都消失了。 事实证明,Vista突然在C:\\ Program Files \\ {MyApp}中查找其文件,而不是在VirtualStore中查找。 将文件从VirtualStore复制到Program文件夹解决了该问题,但从未理解为什么
  2. 第二个问题:现在,使用Windows 8的一些用户(少数)遇到了一个不同的奇怪事实。 我的应用程序似乎无法在VirtualStore中创建文件,但可以编辑现有文件。 因此,如果我手动创建文件,则一切正常。 如果不是,则该应用程序无法运行:既不在程序文件夹中也不在虚拟存储中修改文件

现在我想解决问题。 我的计划是将所有需要修改的文件移至CSIDL_LOCAL_APPDATA中,并让软件将文件保存在那里。 仅可执行文件将位于程序文件夹中。 但是,为了向后兼容,我似乎无法使用似乎特定于Vista +的SHGetKnownFolderPath。 因此,我将使用SHGetFolderPath,我知道它已被弃用,但应该可以在XP中使用,并且可以作为Vista +中SHGetKnownFolderPath的包装,这对我很有用。

我的问题:

  • 关于我的问题1和2有什么想法吗? 我想了解他们,以确保我打败了他们。
  • 我的计划是否符合UAC? 据我了解,但是...
  • 除了我的解决方法以外,还有什么方法可以确保XP的兼容性? 我不赞成使用不推荐使用的功能,但是我绝对不想有两个版本(XP和Vista +)来处理!

非常感谢您提供的任何帮助。 卢卡

这些是我对问题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。这就是为什么我建议使用Version Helper函数在Windows 8上进行版本检查的原因。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM