Mar*_*man 9 windows installation virtualization uac windows-7
我正在使用一些遗留应用程序(10-15岁),我正在尝试找到有关在Windows 7上安装和运行它们(以及任何用户应用程序)的"正确"方法的指导,而无需完全的管理员权限.
换句话说,在文件可执行/只读的情况下,文件应该在哪里,注册表项应该去哪里,以避免在安装和安装过程中出现UAC和Windows 7文件/注册表虚拟化问题运行.
几年前,我似乎记得有关此主题的微软白皮书,但现在无法找到任何相关信息.我在用户端找到了信息(如何通过兼容性调整让遗留应用程序在Windows 7上运行),但在开发人员方面没有(如何创建/安装应用程序以便在Windows 7上本地运行).
任何指向此类信息的指针都将非常受欢迎.谢谢.
渣
Ian*_*oyd 11
您正在考虑Windows徽标要求.
- 默认安装到正确的文件夹
用户应该对文件的默认安装位置具有一致且安全的体验,同时保持将应用程序安装到他们选择的位置的选项.还需要将应用程序数据存储在正确的位置,以允许多个人使用同一台计算机,而不会破坏或覆盖彼此的数据和设置.
Windows在文件系统中提供特定位置,以存储特定于用户的程序和软件组件,共享应用程序数据和应用程序数据:
- 默认情况下,应将应用程序安装到Program Files [16]文件夹中.由于为此文件夹配置了安全权限,因此绝不能将用户数据或应用程序数据存储在此位置
[16] %PROGRAMFILES%为天然的32位和64位应用程序,和%PROGRAMFILES(x86)的%分别在x64运行32位应用程序
必须在计算机上的用户之间共享的所有应用程序数据都应存储在ProgramData中
特定用户专用且不与计算机的其他用户共享的所有应用程序数据必须存储在Users \\ AppData中
切勿直接写入"Windows"目录和/或子目录.使用正确的方法安装文件,如字体或驱动程序
在"每台机器"安装中,用户数据必须在首次运行时写入,而不是在安装期间写入.这是因为在安装时没有正确的用户位置来存储数据.应用程序尝试在安装后修改机器级别的默认关联行为将失败.相反,必须在每个用户级别声明默认值,这可以防止多个用户覆盖彼此的默认值.
接下来是您不应该写入任何需要管理权限的位置.
注意:您可以在Windows 2000或Windows XP上简单地通过(作为Windows 2000徽标要求)作为标准用户运行来测试所有这些.
由于大多数应用程序忽略了徽标要求,并且在使用标准用户权限运行时会失败,因此Windows Vista包括通过虚拟化对受保护位置的写入来保持这些错误应用程序一瘸一拐的能力 - 而不是让它们失败.
您可以通过向RunAs Invoker显示您的应用程序来选择退出此兼容性攻击:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
...
<!-- Disable file and registry virtualization -->
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
<security>
<requestedPrivileges>
<requestedExecutionLevel level="asInvoker" uiAccess="false"/>
</requestedPrivileges>
</security>
</trustInfo>
...
</assembly>
Run Code Online (Sandbox Code Playgroud)
徽标指南讨论了UAC和对某些位置的写入虚拟化:
- 遵循用户帐户控制(UAC)指南
某些Windows应用程序在管理员帐户的安全上下文中运行,并且许多应用程序需要过多的用户权限和Windows权限.控制对资源的访问使用户能够控制他们的系统以防止不必要的20次更改.控制资源访问的最重要规则是提供用户执行其必要任务所需的最少访问"标准用户上下文".遵循UAC准则,在需要时为应用程序提供必要的权限,而不会使系统经常面临安全风险.
大多数应用程序在运行时不需要管理员权限,并且应该作为标准用户运行良好.Windows应用程序必须具有清单21(嵌入式或外部22),用于定义其执行级别,并告知操作系统应用程序运行所需的权限.
例如,
应用程序的主要进程必须作为标准用户(asInvoker)运行.必须将任何管理功能移动到以管理权限运行的单独进程中.
使用提升的权限(requireAdministrator或highestAvailable)运行其主进程23的应用程序需要豁免
豁免将考虑以下情况:
- 执行级别设置为highestAvailable和/或requireAdministrator的管理或系统工具
要么
- 仅辅助功能或UI自动化框架应用程序将uiAccess 24标志设置 为true以绕过用户界面权限隔离(UIPI)
然后有高dpi.十年来的Windows徽标要求要求应用程序对高(即非96dpi)显示器做出适当响应.如果用户确实使用"大字体",大多数应用程序都会崩溃,微软放弃了,就像文件系统的虚拟化一样,它们也会虚拟化dpi设置.除非应用程序选择退出兼容性黑客行为:Windows会骗你并告诉你你是96dpi.
只有在您正确编写应用程序后,才应在应用程序的清单中添加条目以禁用高dpi缩放:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
...
<!-- We are high-dpi aware on Windows Vista -->
<asmv3:application xmlns:asmv3="urn:schemas-microsoft-com:asm.v3">
<asmv3:windowsSettings xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">
<dpiAware>true</dpiAware>
</asmv3:windowsSettings>
</asmv3:application>
...
</assembly>
Run Code Online (Sandbox Code Playgroud)
无论如何,它就是Windows 7客户端软件徽标计划.
注意:如果您在15年前(1995年)编写Windows应用程序,我假设您正在编写:
而不是:
值得注意的是,Windows NT被设计为安全的操作系统.你不能随心所欲地做任何你想做的事.这与以下方面有根本区别:
没有安全感.
写入Windows和Program Files文件夹需要管理员权限.这是因为通常只有管理员才能安装应用程序.但普通用户无法修改或损坏已安装的程序 - 或Windows本身的安装,例如: