禁用UAC虚拟化后恢复文件

我们终于可以将软件的文档从程序自己的目录中移出来,放到“我的文档”中。 我们还在清单中添加了“requestedPrivileges”行,以防止虚拟化带来进一步的麻烦。

但是,如果我们只这样做了,那么在Vista / 7中运行旧版本的任何人都可能在更新之后在隐藏的VirtualStore目录中的某处丢失其工作。 那么迁入21世纪的首选方式是什么?

坦率地说,我对于复制文件有点谨慎,尤其是因为我似乎无法find一个在影子目录中获得程序化的方式,但是大概其他许多人肯定也面临同样的问题。

除非您合法需要管理权限才能使您的程序正常工作,否则请不要添加requestedPrivileges – 您的描述中没有任何内容表明您拥有这些权限。 这也应该让你简单地复制第一次启动时的文件,就好像它们仍然在你的程序目录中一样,因为任何虚拟化仍然有效。

但是,如果您绝对必须在未启用UAC的情况下执行迁移,则可以在%LOCALAPPDATA%\VirtualStore\path\to\file找到您的%LOCALAPPDATA%\VirtualStore\path\to\file 。 例如,如果您的文件存储在C:\ Program Files \ OurApp \中,您可以在%LOCALAPPDATA%\VirtualStore\Program Files\OurApp\找到它。

要获得%LOCALAPPDATA%的路径,可以使用带有CSIDL_LOCAL_APPDATA SHGetSpecialFolderPath作为CSIDL参数。