为什么文件被放置在“C:\Users\<用户名>AppData\Local\VirtualStore\Program Files(x86)”中?

2023-12-14

我最近更新了我的视觉基本6.0应用程序,现在包含一个 exe.manifest 文件以防止UAC虚拟化。应用此更新后,一些用户找不到他们的数据文件(AccessMDB 文件),经过系统搜索后,他们最终在C:\Users\<username>AppData\Local\VirtualStore\Program Files(x86).

该文件夹区域的用途是什么?文件如何/何时移动到该区域?我们如何预防呢?我现在希望我的应用程序使用.manifest这种事不会再发生了。当应用程序被放置在 UAC 虚拟化中时,文件是否在使用清单之前放置​​在那里?


未以提升的权限运行的应用程序不应访问Program Files and Program Files (x86)目录。这对于安全来说是有好处的。此外,在多数情况下当开发人员告诉他的程序将数据保存在Program Files文件夹,比如说程序设置,他完全忘记了程序设置应该是每个用户的事情!也就是说,本地计算机上的每个用户都应该能够使用该程序而不影响其他用户。换句话说,一个表现良好的应用程序应该将其设置保存在

C:\Users\<User Name>\AppData\Local\<Manufacturer>\<Product>\<Product Version> 

目录。

例如,我的 AlgoSim 软件写入

C:\Users\<User Name>\AppData\Local\Rejbrand\AlgoSim\2.0

当然,

C:\Users\<User Name>\AppData\Local\

必须在运行时动态查找路径。使用

SHGetFolderPath(0, CSIDL_LOCAL_APPDATA, 0, SHGFP_TYPE_CURRENT, @path);

为了这。

自 Windows Vista 以来,未以提升的权限运行的应用程序会尝试写入Program Files (or Program Files (x86)) 文件夹实际上会在不知不觉中写入 VirtualStore 文件夹。微软认为这比程序失败(由访问限制引起)要好。事实上,由于这一点,大多数旧程序将其设置保存在Program Files文件夹将继续与 Windows Vista+ 一起使用,并且每个用户都将获得自己的设置,作为奖励,尽管原始软件制造商没有想到这一点。

您可以使用清单告诉 Windows 您的应用程序知道 VirtualStore 并且 Windows 不应在运行时更改任何路径。但如果你真的希望能够写信给Program Files文件夹,那么我认为您每次都必须以提升的权限运行应用程序,这通常是不可取的。

有关如何创建清单以使程序在每次执行时显示 UAC 提示以及如何禁用 VirtualStore 的详细信息,已在之前的几个 Stack Overflow 问题中得到解决。请随意使用搜索框!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么文件被放置在“C:\Users\<用户名>AppData\Local\VirtualStore\Program Files(x86)”中? 的相关文章

  • 如何从 Vista/7 可执行文件中提取完整图标?

    如果我有一个 Vista ico 文件 其中包含 16x16 32x32 256x256 等版本的图标 我只需执行以下操作即可成功将其加载为 NET 图标 Icon myIcon new Icon C MyIcon ico 然后我可以访问图
  • .NET 3.5 是媒体中心插件的合理先决条件吗?

    我们有一个开源媒体中心插件 目前它的下载大小只有区区一兆字节 如果我将插件更改为需要 NET 3 5 用户可能需要下载197 megs http www west wind com weblog posts 292203 aspx只是为了能
  • TFS 构建:以管理员身份运行 Powershell 脚本

    我为我们的夜间构建服务器创建了一个构建定义 构建项目 Windows 服务 后 我需要执行 Powershell 脚本来安装并启动该服务 因此 我添加了一个构建步骤来运行特定的 Powershell 脚本 然后我在 很快 夜间构建服务器上安
  • 强制我的 MFC 应用程序在 Vista 上以管理员身份运行

    我有一个使用 Visual Studio 2008 构建的 MFC 应用程序 它需要在 W2K XP 2003 和 Vista 上运行 该应用程序写入注册表中的 HKLM 并且仅在以管理员身份运行时才能在 Vista 上运行 我的问题是 我
  • 如何检测我的进程是否正在运行 UAC 提升的进程?

    我的 Vista 应用程序需要知道用户是否以 管理员 身份 提升权限 或标准用户 非提升权限 启动它 我如何在运行时检测到这一点 对于我们这些使用 C 工作的人来说 在 Windows SDK 中 有一个 UACDemo 应用程序作为 跨技
  • 为什么要选择 64 位操作系统? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 关于这些问题 哪个 Vista 版本最适合开发人员计算机 https stackoverflow com questions 17653
  • Windows 窗体旋转

    当您在 Net 中创建表单时 它会显示为纵向布局的对话框 通常没有人喜欢横向或颠倒地阅读 但我有一个非常充分的理由旋转表格 有人知道如何在 Windows Vista 上用 C 实现这一点吗 必须在 WinForms 中吗 在 WPF 中
  • 具有管理员权限的 Windows 窗体启动

    我有一个 Windows 窗体应用程序 需要管理员权限才能运行 为此 我使用以下代码
  • 带有我的应用程序图标的安全中心符号盾

    我开发了一个需要管理员权限才能执行的应用程序 在 Windows 7 上运行应用程序 用户始终必须以 以管理员身份运行 启动应用程序 否则我的应用程序会提示用户 您没有管理权限等 这是可以理解的 因为 Windows 7 中有 UAC 要摆
  • 从低完整性提升到中等完整性

    这类似于 如何从低完整性级别流程创建中等完整性级别流程 https stackoverflow com questions 7254711 how create medium integrity level process from low
  • Java 应用程序可以使用 Aero Glass 效果吗?

    基于Swing的Java能否在Windows Vista 7下实现Aero Glass效果作为背景 从 Java SE 6 开始 Swing 的 Windows 原生外观使用 Aero Chet Haase 发表了一篇博客文章 其中包含有关
  • 如何在Vista下使用WIA 1进行开发?

    我在Vista SP1下使用VS2008 SP1 我的 Net 程序使用对 WIA Microsoft Windows 图像采集库 v2 0 的 COM 引用 我正在使用 CommonDialogClass ShowAcquireImage
  • XP 和 Vista 之间使用 Winsock API 的 UDP 多播差异

    Windows XP 和 Windows Vista 之间设置 UDP 多播套接字所需的实现似乎有所不同 具体来说 在 Windows XP 下 您must call bind 在您可以引用任何特定于多播的套接字选项之前 然而 在windo
  • 以标准用户身份打开默认浏览器 (C++)

    我目前正在使用 ShellExecute 打开 在用户浏览器中打开 URL 但在 Win7 和 Vista 中遇到了一些麻烦 因为该程序作为服务运行提升 当 ShellExecute 打开浏览器时 它似乎读取 本地管理员 配置文件而不是用户
  • 如何检测Windows版本是否合法? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我对获取版本信息不感兴趣 我想做的就是确保我的应用程序只能在合法版本的 Windows 上运行 而不是在盗版版本上运行 Windows 使
  • “以管理员身份运行”时的 Windows 批处理文件起始目录

    我有一个位于目录中的批处理文件 也必须从那里运行 因为它会更新该目录中的文件 这工作得很好 除非用户以管理员身份运行批处理文件 Vista 上需要 那么起始目录是C Windows System32 有什么办法仍然能够知道批处理文件是从哪个
  • 如何在 Vista 上安装 Delphi 7

    我多次尝试在 Vista 上安装 Delphi 7 但 Vista 告诉我此应用程序 Delphi 7 存在已知问题 从而阻止了我这样做 我公司的其他几个人在 Vista 上安装 D7 时遇到了问题 由此得出的结论是 我们的 D7 应用程序
  • Windows Vista 下的指针稳定性

    我在 Windows XP Pro 64 位下使用 Visual Studio 2005 进行 C 和 C 项目已经有一段时间了 我在调试器中不时使用的流行技巧之一是记住程序先前调试运行中的数字指针值 例如0x00000000FFAB893
  • Java 可以启动 Windows UAC 吗?

    正如标题所说 我想知道用 Java 编写的程序是否可能 并且只有java 以管理员权限重新启动自己 最好是 jar 以本机 Windows UAC 的方式显示 为了使其对用户更可信 我做了功课 发现可以使用来完成此操作C 和 Java 之间
  • 嵌入清单文件以要求具有 mingw32 的管理员执行级别

    我正在 ubuntu 下使用 i586 mingw32msvc 交叉编译应用程序 我很难理解如何嵌入清单文件以要求 mingw32 具有管理员执行级别 对于我的例子 我使用了这个hello c int main return 0 这个资源文

随机推荐