【问题标题】:Recovering files after disabling UAC virtualization禁用 UAC 虚拟化后恢复文件
【发布时间】:2011-03-15 15:42:15
【问题描述】:

我们终于开始着手将我们软件的文档从程序自己的目录中移出,移到“我的文档”中。我们还在清单中添加了“requestedPrivileges”行,以防止进一步出现虚拟化问题。

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

坦率地说,我对到处复制文件有点警惕,尤其是因为我似乎无法找到一种程序化的方式来获取影子目录,但想必很多其他人在我们之前也遇到过同样的问题。

【问题讨论】:

    标签: windows installation uac virtualstore


    【解决方案1】:

    除非您合法地需要管理权限才能使您的程序运行,否则不要添加 requestedPrivileges - 您的描述中没有任何内容建议您这样做。 应该还允许您在第一次启动时简单地复制文件,就好像它们仍在您的程序目录中一样,因为任何虚拟化仍然有效。

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

    要获取%LOCALAPPDATA% 的路径,您可以使用SHGetSpecialFolderPathCSIDL_LOCAL_APPDATA 作为CSIDL 参数。

    【讨论】:

    • 不,我们不需要任何额外的权限,所以我们使用 asInvoked 级别。只是我们在虚拟化方面遇到了一些问题(例如用户通过资源管理器备份旧数据),并且希望将来避免它们。这就是为什么我们要搬东西。我认为执行复制的存根可执行文件也应该可以解决问题。
    • @doynax:通过要求更多权限,您只会惹恼那些离开 UAC 并且现在必须接受在每次启动程序时授予您的程序管理权限的用户 - 而这只是拥有机器上的管理员角色;对于通常在受限帐户下运行的用户,他们每次都必须输入管理员密码。充其量,添加特权只是一种解决方法,而不是修复;要解决这个问题,你必须移动所有东西,一旦你这样做了,你就不需要权限了。
    • 我正在请求“asInvoked”级别,根据 MSDN,这是表明您的应用程序支持 Vista(并因此关闭虚拟化)而不要求任何额外权限的正确方法。
    • @doynax:啊,是的,我的错误——我只是注意到我误读了。只要你使用 asInvoker 就可以了,而且它确实会关闭虚拟化。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-26
    • 2023-02-09
    • 2010-10-26
    • 1970-01-01
    • 2014-02-02
    • 2016-04-24
    相关资源
    最近更新 更多