你正在考虑.
- 默认安装到正确的文件夹
用户应该有一个一致的、
默认的安全体验
文件的安装位置,同时
保留安装选项
应用到他们所在的位置
选择。还需要保存
应用程序数据正确
允许多人的位置
使用同一台计算机,无需
损坏或覆盖彼此的数据和设置。
Windows 提供
文件系统中的特定位置
存储程序和软件
组件、共享应用程序数据、
和特定于的应用程序数据
用户:
- 默认情况下,应用程序应安装到 Program Files[16] 文件夹。由于为此文件夹配置的安全权限,用户数据或应用程序数据绝不能存储在此位置
[16] %程序文件%对于本机 32 位和 64 位应用程序,以及%程序文件(x86)%分别适用于在 x64 上运行的 32 位应用程序
必须在计算机上的用户之间共享的所有应用程序数据都应存储在 ProgramData 中
所有特定用户专有且不与计算机其他用户共享的应用程序数据必须存储在 Users\\AppData 中
切勿直接写入“Windows”目录和/或子目录。使用正确的方法安装文件,例如字体或驱动程序
在“每台计算机”安装中,用户数据必须在首次运行时写入,而不是在安装过程中写入。这是因为安装时没有正确的用户位置来存储数据。应用程序在安装后尝试在计算机级别修改默认关联行为将不会成功。相反,必须在每个用户级别声明默认值,这可以防止多个用户覆盖彼此的默认值。
其次,您不应该写入任何需要管理权限的位置。
Note:您只需以标准用户身份运行(根据 Windows 2000 徽标要求)即可在 Windows 2000 或 Windows XP 上测试所有这些内容。
由于大多数应用程序忽略了徽标要求,并且在使用标准用户权限运行时会失败,因此 Windows Vista 提供了通过虚拟化对受保护位置的写入来使这些有缺陷的应用程序保持跛行的功能,而不是让它们失败。
您可以通过将您的应用程序显示为来选择退出此兼容黑客运行方式调用者:
<?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>
徽标指南讨论了 UAC 和写入某些位置的虚拟化:
- 遵循用户帐户控制 (UAC) 指南
一些 Windows 应用程序运行在
管理员的安全上下文
帐户,并且许多需要过多
用户权限和 Windows 特权。
控制对资源的访问
使用户能够控制
他们的系统针对不需要的 20
变化。最重要的规则是
控制对资源的访问是
提供最少的访问量
所需的“标准用户上下文”
用户执行他或她必要的操作
任务。遵循 UAC 指南
为应用程序提供
需要时需要必要的权限,
无需不断离开系统
面临安全风险。
大多数应用程序不需要
运行时的管理员权限,
并且应该可以很好地运行
标准用户。 Windows应用程序
必须有一个清单 21(嵌入或
外部 22 )定义了它们的
执行级别并告诉操作系统什么
应用程序所需的权限
命令运行。
豁免将经过考虑的为了
以下场景:
- 执行级别设置为的管理或系统工具
最高可用,和或
需要管理员
Or
- 仅可访问性或 UI 自动化框架应用程序设置uiAccess24 标志为 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>
无论如何,一切都在那里,.
Note:如果您在 15 年前(1995 年)编写 Windows 应用程序,我assume您正在为:
而不是:
- 视窗NT 3.1
- 视窗NT 3.5
- 视窗NT 4
- 视窗2000
- 视窗XP
值得注意的是,Windows NT 被设计为一个安全操作系统。你不可以随意做任何你想做的事。这是与以下内容的根本区别:
- 视窗1
- 视窗2
- 视窗3
- 视窗3.1
- 视窗95
- 视窗98
- 视窗我
没有安全保障。
写入 Windows 和 Program Files 文件夹需要管理员权限。这是因为通常只有管理员才应该安装应用程序。但普通用户无法修改或损坏已安装的程序 - 或 Windows 本身的安装,例如:
- 删除 System32 是不好的 http://knowyourmeme.com/memes/delete-system32
- 删除 WinSxS 不好 http://www.vistax64.com/general-discussion/105445-can-i-remove-c-windows-winsxs.html