我看到了几个与此相反的问题:“如何禁用虚拟化?”这不是我的问题。我希望强制应用程序在启用了虚拟化的下运行。
我有一个在Windows下运行良好的应用程序,但是,由于它将其配置写入其工作目录( "C:\Program (X86)“的子文件夹),它不能在Windows 7下完全工作。如果我使用任务管理器打开,它可以很好地保存它的配置,但当然它无法加载该配置。
我不想设置它作为管理员运行,因为它不需要这些特权。我想将它设置为启用UAC虚拟化时运行。
我找到了一个建议,我在HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags
的注册表里放了一些魔法。为了完整起见,我还将其放在Wow6432Node
中,但两者都没有任何效果。
发布于 2012-01-13 15:57:14
文件系统在某些情况下是虚拟化的,那么当应用程序不合格时,您的问题是如何仍然打开它呢?不太可能,MSDN
在以下场景中,虚拟化是不可选的:
发布于 2014-09-18 01:54:14
这可能来得太晚了,但我是作者的建议,您发现激活UAC虚拟化,并有一个错误在我的帖子。要修改的注册表项如下:
HKLM\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers\
HKCU\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers\
(注意附加的"Layers" )
因此,一个完整的例子是:
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers]
"C:\\Program Files (x86)\\Some Company\\someprogram.exe"="RUNASINVOKER"
注意,必须用空格字符分隔多个参数。
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers]
"C:\\Program Files (x86)\\Some Company\\someprogram.exe"="WINXPSP3 RUNASINVOKER"
--
我真的很抱歉你因为我的错误而损失了相当多的时间。
顺便说一句,让我表达我对伊恩·博伊德的观点的异议。有些地方不应该授予每个人写权限,比如这个,因为它违反了“系统范围内的写只能授权特权主体”的基本安全规则。程序文件是一个系统范围的地方,而不是每个用户的地方.
当然,所有规则都有例外,但在目前的情况下,可以想象一个恶意构建的配置文件使程序执行在用户运行时成为任意命令。从更轻的方面来说,人们可以想象另一个用户删除的“错误”,这会使应用程序失败。更重要的是,程序文件中的应用程序可执行文件通常是由管理员运行的,迟早的。即使您不想卸载程序,卸载程序也经常运行程序文件中的卸载可执行文件。也许卸载过程将使用该配置文件,这可能会产生后果,如果它是恶意构建的。
当然,你可能会说,这听起来有点偏执,同意。在Win XP的时候,我确实在程序文件中修改了一些NTFS ACL,并且在那之后就可以睡觉了,但是当工具可用时,为什么要冒一点点风险呢?
发布于 2017-03-21 17:18:10
我发现了UAC不起作用的一个不太好的条件:当Program Files
中的文件变成只读时。
也就是说,假设文件C:\Program Files\<whatever>\config.ini
被标记为只读文件。当应用程序试图更改它时,UAC将返回一个拒绝访问的错误,而不是将其转换为%LOCALAPPDATA%\VirtualStore\<whatever>\config.ini
。
虽然我没有发现这个文档,但是这种行为可能是通过设计来完成的,因为它是有意义的。
解决方案很简单:确保应用程序应该修改的所有文件都不是只读的(或者只是取消所有文件的标记,因为用户无论如何都无法更改它们)。
https://stackoverflow.com/questions/8852967
复制相似问题