gpt4 book ai didi

winapi - 如何(以编程方式)获取 Windows UAC 虚拟化文件的位置?

转载 作者:行者123 更新时间:2023-12-04 04:47:38 24 4
gpt4 key购买 nike

我有一个 32 位 Windows 旧应用程序(带有 C/Win32 源代码),它在可执行文件所在的同一文件夹中创建其数据文件。

由于应用程序没有安装程序,用户可以将可执行文件放在他/她想要的任何地方,因此应用程序有一个对话框来通知用户其数据所在的位置。

但是在 Microsoft Vista/Seven 下,如果用户将应用程序放在 Program Files 或任何其他系统保护的文件夹中,数据文件将被虚拟化并移动到虚拟存储。

如果,在 Vista/Seven 下,我仍然想通知用户数据文件所在的位置:
(不阻止 list 文件中的虚拟化)

  • 我如何(以编程方式)知道数据文件是否已虚拟化?或者,如果可执行文件所在的文件夹意味着数据文件将被虚拟化?
  • 假设我知道数据文件已虚拟化,我如何(以编程方式)知道虚拟文件夹的位置,以在信息对话框中显示它?

  • 我发现以下问题与我要问的非常接近,但它没有显示知道何时对文件进行虚拟化以及在何处进行虚拟化的解决方案(如果有)。

    How to detect file redirection to the Windows VirtualStore?

    最佳答案

    虚拟化对应用程序是透明的。知道它是否被虚拟化的唯一方法是根据您链接到的问题中的答案询问操作系统(使用 GetTokenInformation()TokenVirtualizationEnabled 标志),但没有办法(我知道)询问操作系统虚拟化项目的实际存储位置,因为它可能因操作系统版本而异。您必须进行一些研究,然后为您的应用程序在运行时检测到的每个给定操作系统硬编码路径。

    如果您要更新代码以检测虚拟化,那么最好更新代码以更好地与 UAC 配合使用。停止将您的文件存储在它们不属于它们的地方,并开始将它们存储在 Microsoft 希望您存储它们的地方。在这种情况下,改为在用户的个人资料中。使用 SHGetFolderPath()或相关功能定位用户的CSIDL_LOCAL_APPDATA文件夹(或 SHGetKnownFolderPath() 在 Vista+ 上找到 FOLDERID_LocalAppData 文件夹),然后在它下面创建一个子文件夹,供您的应用程序存储其数据文件。

    关于winapi - 如何(以编程方式)获取 Windows UAC 虚拟化文件的位置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17953426/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com