问题标签 [virtualstore]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
1529 浏览

windows - Windows 注册表重定向是“坏事”吗?

我有自己的安装程序,我用它来安装我编写的几个应用程序。

我一直在更新这个程序以避免应用程序的数据文件更新进入用户的 VirtualStore,因为我读到这是一件“坏事”。我通过将程序和通用数据文件分别存储在正确的位置来做到这一点,而不是像 XP 时代那样将所有内容都粘贴在 Program Files 中。

我现在也在使用 SHGetFolderPath (是的,它已被弃用,但我仍然需要支持我的 XP 用户)来获取已知文件夹而不是拖网注册表,这是另一个“坏事”(我读过)。

我尝试做的下一件事是重写安装程序代码,以避免在向 HKLM 写入内容时将注册表重定向到 Wow6432Node,因为我认为这是另一个“坏事”。

然而,虽然我可以把应用程序特定的东西放在那里(比如安装文件夹,如果用户决定安装默认值以外的地方),杀手是需要把卸载信息放在 HKLM\Software\Microsoft\Windows \CurrentVersion\卸载。对于在 64 位系统上运行的 32 位内容,它被重定向到 Wow6432Node。我看不出有什么办法——这实际上可能吗?

0 投票
1 回答
953 浏览

installshield - 卸载后安装屏蔽遗留文件

我创建了一个 Install shield 2009 安装程序,它将许多文件安装到 C:\Program Files。在 Windows 7 上运行时,安装工作完美。但是,执行卸载时,文件会从 C:\Program Files 中删除,但不会自动从 VirtualStore 中删除。有没有办法做到这一点而不必手动删除文件?

0 投票
0 回答
392 浏览

.net - Visual Studio 调试构建应用程序打开已删除的文件

我的 .NET 应用程序现在遇到了最奇怪的情况。当我在 Visual Studio(调试版本)中启动应用程序时,它会打开并加载位于 .xml 的 .xml 文件 C:\ProgramData\MyApp\Settings.config

唯一的问题是,这个文件不存在。我删除它以清除所有设置,但应用程序仍在加载它(我的旧设置)。在发布模式下,它会正确检测到没有设置,并创建一个新文件。但是当我删除它并在调试器中重新启动时,它会再次加载以前的文件。

我在加载它的行上放置了一个断点,文件名显然就是上面提到的那个。我什至删除了整个文件夹 ( C:\ProgramData\MyApp),应用程序仍在加载它。当我将断点处的确切字符串复制到 Windows 资源管理器中时,它说没有这样的文件。但是它FileStream被创建,它具有正确的长度,并且XmlSerializer完全读取它。

我可以在 Windows 资源管理器(隐藏和系统)中看到所有文件,我什至尝试删除该文件夹。我也没有任何 NTFS 连接和类似的东西。

Visual Studio 从哪里加载这个文件?

[编辑]

感谢@MichaelBurr 在下面的评论,我发现(使用进程监视器)该文件正在从C:\Users\MyAccount\AppData\Local\VirtualStore\ProgramData\MyApp\Settings.config. 这种“重定向”仅在调试模式下发生(即使在我刚刚为该特定文件编写的全新测试控制台应用程序中)。

谁能解释为什么会这样?

[编辑2]

不知道这是否有帮助,但是:在某些时候,我使用它的 WiX 安装程序在我的机器上安装和卸载了这个应用程序的发布版本。如果当时 Visual Studio 也在运行,它是否有可能决定为自己的目的创建此文件夹的“虚拟副本”?

如果是,我如何让它再次使用绝对路径?

0 投票
3 回答
13814 浏览

c# - 如何检测到 Windows VirtualStore 的文件重定向?

自 Win Vista 发布以来,Microsoft 为作为 32 位进程运行的遗留应用程序引入了文件虚拟化。作为 Microsoft 的用户帐户控制 (UAC) 的一部分发布的任何旧版应用程序尝试写入被认为受操作系统保护的任何位置都会被重定向到 VirtualStore。

此时,已采取措施确保相关应用程序现在作为可识别 UAC 的 64 位进程运行,但是,这对于解决将用户数据迁移到被认为不受虚拟化安全的位置的问题几乎无济于事。

在解决此问题时,我发现在处理多个用户帐户时,在位于 的旧路径中进行了一些更改,C:\Program Files(x86)\MyApp\Data同时对位于 的 VirtualStore 进行了更改%localappdata%\VirtualStore\Programs\MyApp\Data。问题是,如何检测是否正在发生任何文件/文件夹虚拟化以及如何合并这两个位置?

编辑:我发现几个网站详细说明了问题以及如何复制它,但没有包含修复它的方法。我确实找到了这个引用FILE_ATTRIBUTE_VIRTUAL,它定义了一个似乎很有希望的文件属性 - 我在某处找到了另一个引用,虽然我不记得在哪里,它指出这是 Windows 用来指示文件虚拟化正在发生并标记的属性请求重定向。

这些链接描述了这个问题:

http://www.c-sharpcorner.com/uploadfile/GemingLeader/windows-file-and-registry-virtualization/

http://www.codeproject.com/Articles/66275/Windows-Vista-File-and-Registry-Virtualization

http://download.microsoftvirtuallabs.com/download/8/a/7/8a71365b-4c80-4e60-8185-8f12f59bf1d4/UACDataRedirection.pdf

0 投票
1 回答
3852 浏览

windows - 将文件保存到 App Data 文件夹

我在 Visual Studio 2012 Ultimate 中编写了一个 Visual Basic.Net 应用程序。当此应用程序安装到Program Files文件夹时,保存文件时,它们位于以下位置:

如何指定将文件保存在以下目录中:

文件夹(基本上,不是 VirtualStore 文件夹)?

我是否需要在 Windows 中注册此应用程序才能执行此操作?

提前致谢

0 投票
3 回答
18045 浏览

windows-7 - 如何防止文件重定向到 VirtualStore 以读取/写入文件?

我正在使用带有 .net 2.0 的 C#

我将程序数据保存在以下文件中:C:\ProgramData\MyProgramName\fileName.xml

安装并运行我的应用程序一次后,我将其卸载(在卸载期间,我从“程序数据”中删除所有文件)然后我重新安装应用程序并运行它。

奇怪的是,我的应用程序启动时就好像程序数据中的文件存在一样——这意味着,即使数据文件被删除,我的应用程序中也有旧数据。

运行时:

即使我确定该文件不存在,我也得到了“真实”。

当我以管理员身份运行应用程序然后文件不存在时,事情变得奇怪了。

经过研究,我发现在没有管理员权限的情况下运行我的应用程序而不是获得:

我明白了

确实有一个文件存在于以前的安装中(我显然没有删除它,因为我不知道它存在)。


因此,请指导我在没有管理员权限的情况下运行应用程序时如何阻止这种情况。

我不想在 VirtualStore 文件夹中自动创建任何文件。请讨论所有可能的方法来阻止这种情况。

0 投票
1 回答
218 浏览

html - Flash 虚拟画廊替代方案

我对 Flash Like Virtual Store 有一个要求,其中,当网站加载时,用户将看到虚拟商店、全屏全景视图,一旦用户点击任何产品,它就会像视频一样播放商店,该类别将被加载,这可以在 Flash 中完成,但我是 Flash 的新手,想知道 jQuery 中的任何替代品。

我们可以在 jQuery 或 HTML5 中有类似上面的东西吗,谁能给我提供 jQuery 或 HTML5 中相同的演示链接。

0 投票
3 回答
2646 浏览

c# - 获取存储在 VirtualStore 中的日志文件的真实路径

我的应用程序将日志文件存储在一个位置,根据管理员设置,该位置可以重定向到 VirtualStore 中的文件夹。它们有时会出现在,例如:

日志文件位于:

C# 认为它在这里:

C:\Program 文件 (x86)\我的应用程序\logs

这只是代码的一部分 - 一个尝试在记事本中打开日志文件的按钮。它运行 Process.Start( path-where-application-thinks-log-files-are );

如果我使用 File.Exists( path-where-application-thinks-log-files-are ); 我是真的 - 因为 c# 知道要查看 VirtualStore 位置。但是当我尝试启动文件时,它失败了。

所以我的问题是,从 Process.Start() 命令的角度来看,有没有办法将路径转换为正确的位置?

0 投票
2 回答
6183 浏览

vb.net - 如何停止将文件保存在 Virtual Store / ProgramData 中?

[我在 2 个月前提交了这个问题,但没有任何回复......显然问题仍然存在,我们即将发布我们应用程序的新版本,所以现在正在编写一些文档让用户删除虚拟商店中的任何条目-我不想做的事情....所以现在真的希望有人可以帮助我们吗?!]

我很感激有很多关于这个主题的信息,但我仍然有一个烦人的问题,不知道该去哪里......因此来到这里!

我们有一个应用程序 (VB.NET) 现在将 REPORT 文件安装到 ProgramData 下的文件夹中。现在我们的应用程序 dll 是从第三方应用程序(我们显然无法控制)运行的,这个第三方应用程序允许人们运行报告;但是当运行报告时,它会更新报告,以便存储它的“上次运行日期”。这就是给我们带来乐趣的原因。

启用 UAC 后,报告文件将被复制到虚拟存储中的等效位置。当他们使用我们应用程序的当前版本时,这当然没问题,但是当我们发布新版本(带有修改后的报告)时,这些新版本会正确安装到 ProgramData 中,但是当用户运行应用程序时 - 他们会看到来自虚拟商店的过时报告。

我们非常接近编写一些安装文档,告诉人们在安装我们的新版本之前从虚拟商店中删除任何报告 - 但这是一个真正的逃避!

第三方应用程序还安装了自己的报告(安装到 ProgramData 下的不同位置),并且他们能够在不启动虚拟商店的情况下更新他们的报告 - 所以我们知道这是可能的!

我刚刚在我们的 dll 中添加了一个清单:

希望这是治愈方法,但可惜没有!

所以,我愿意接受你们可能有的任何建议?!?

干杯,

克里斯。

0 投票
1 回答
1045 浏览

c# - 使用非管理员用户写入 Windows 目录(虚拟存储)

我为从 windows 目录读取数据的遗留应用程序编写了一个接口。

所以我需要将数据写入windows目录。(Windows 8 操作系统)

我正在使用下面的代码来获取写入文件的 Windows 文件夹路径。

正如我在MSDN上所读到的,如果我们运行应用程序,作为普通用户,它会将数据写入虚拟存储 Windows 文件夹,但它似乎无法正常工作。我收到拒绝访问错误。

我的应用程序使用 x86 平台构建。

我缺少的东西或 Windows 8 操作系统的任何限制。

请协助,非常感谢提前。