寻找有关在 Windows 7 上安装应用程序的“正确”方法的文档

2024-04-03

我正在使用一些遗留应用程序(10-15 年),并试图找到有关在 Windows 7 上安装和运行它们(以及任何用户应用程序)的“正确”方法的指导,而无需完全的管理员权限。

换句话说,可执行文件/只读文件应存放在何处,用户数据/读写文件应存放在何处,注册表项应存放在何处,以避免在安装期间和启动时出现 UAC 和 Windows 7 文件/注册表虚拟化问题。运行。

我似乎记得几年前,微软关于这个主题的白皮书,但现在找不到任何相关信息。我找到了有关用户方面的信息(如何通过兼容性调整让旧版应用程序在 Windows 7 上运行),但没有找到有关开发人员方面的信息(如何创建/安装应用程序以在 Windows 7 上正常运行)。

任何指向此类信息的指针将不胜感激。谢谢。

Marc


你正在考虑.

  1. 默认安装到正确的文件夹

用户应该有一个一致的、 默认的安全体验 文件的安装位置,同时 保留安装选项 应用到他们所在的位置 选择。还需要保存 应用程序数据正确 允许多人的位置 使用同一台计算机,无需 损坏或覆盖彼此的数据和设置。

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 和写入某些位置的虚拟化:

  1. 遵循用户帐户控制 (UAC) 指南

一些 Windows 应用程序运行在 管理员的安全上下文 帐户,并且许多需要过多 用户权限和 Windows 特权。 控制对资源的访问 使用户能够控制 他们的系统针对不需要的 20 变化。最重要的规则是 控制对资源的访问是 提供最少的访问量 所需的“标准用户上下文” 用户执行他或她必要的操作 任务。遵循 UAC 指南 为应用程序提供 需要时需要必要的权限, 无需不断离开系统 面临安全风险。

大多数应用程序不需要 运行时的管理员权限, 并且应该可以很好地运行 标准用户。 Windows应用程序 必须有一个清单 21(嵌入或 外部 22 )定义了它们的 执行级别并告诉操作系统什么 应用程序所需的权限 命令运行。

  • 例如,

  • 应用程序的主进程必须以标准用户身份运行 (作为调用者)。任何行政 功能必须移动到一个单独的 与管理一起运行的进程 特权。

  • 运行其主程序的应用程序需要豁免 具有提升权限的进程 23 (需要管理员或 最高可用)

豁免将经过考虑的为了 以下场景:

  • 执行级别设置为的管理或系统工具 最高可用,和或 需要管理员

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您正在为:

  • Windows 3.1,或
  • 视窗95

而不是:

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

寻找有关在 Windows 7 上安装应用程序的“正确”方法的文档 的相关文章

随机推荐

  • 如何在数组中搜索字符串的一部分?

    我有一个arraylist
  • 从构造函数调用方法:错误:未捕获类型错误:未定义不是函数

    Task 我需要在 Typescript 中构建一个类 在它自己的构造函数中调用它自己的一些方法 Problem 以下示例代码代表的实际代码将成功编译 但在 Javascript 控制台中进行测试时却无法成功编译 Sample export
  • 以编程方式确定汉字的笔画数?

    Unicode 是否存储有关中文 日文或其他基于笔画的字符的笔画计数信息 一点谷歌搜索想出了Unihan zip ftp ftp unicode org Public UNIDATA Unihan zip 发布的文件统一码联盟 http u
  • IntelliJ Idea Maven 项目中 Scala 模块的 Scala 签名错误

    免责声明 我是 Scala 新手 尝试在 IntelliJ IDEA 中使用简单的 scala archtype 创建示例 Scala Maven 项目 IntelliJ 版本是 14 1 2 下面是我的 pom 文件 我确实将 Scala
  • 未找到 GraphViz 的可执行文件:Anaconda-3

    我正在尝试显示树输出 但是当我运行下面的脚本时 我收到如下错误 IncationException 未找到 GraphViz 的可执行文件 我在这里搜索过类似的主题 但其中大多数与 Mac 相关 我使用的是 Windows 10 64 位操
  • 类常量

    我有几个 obj c 类 每个类都需要一些在 switch 语句中使用的常量 我曾尝试使用以下命令在 m 文件中定义这些数字常量 define预处理器指令 所有这些常量都以 kCell 开头 这似乎工作得很好 但 Xcode 的代码感知向我
  • 是否可以设置 git merge 来自动解析? (git 雷雷雷)

    我有 2 台笔记本电脑 其中有一个纯文本文件 该文件必须同步 它用作第三方软件的数据库 客户希望每天同步该文件的内容 第一个想法是制作一个将文件上传到 Dropbox 的脚本 但如果发生冲突 两个用户删除 A 行 第一个用户添加 B 行 第
  • 如何使用slf4j和java.util.logging登录tomcat

    我创建了一个在 Tomcat 8 上运行的 Web 应用程序 一如既往 我想使用 slf4j 在本例中 由 java util logging 支持 因为它是 Tomcat 的默认设置 相关依赖是这样的
  • 返回对 C++ 中静态局部变量的引用

    这个问题只是为了我更好地理解C 中的静态变量 我认为如果将 C 中的局部变量声明为静态 我可以返回对它的引用 因为该变量应该在函数返回后继续存在 为什么这不起作用 include
  • 如何解决Admob执行异常?

    我一直在尝试在我的全新应用程序中实施 Google Admob 广告 我已经处理错误代码 0 内部错误 和 广告 错误等待未来 异常几个小时了 从今天早上起 我就有了一个带有付款方式的 Admob 帐户 我一直在使用我的凭据关注 Googl
  • Tectonicus 2.25 的 XML 文件错误

    我正在尝试为我的单人游戏世界制作一张 Tectonicus 地图 因此我需要一个 XML 配置文件 但是当尝试制作地图时 我在终端 MAC OSX 中收到此错误 Parsing config from Users ralphvandenhe
  • 我无法找到 libftdi 的 mpsse (SPI) 模式的示例代码

    这不是一个家庭作业问题 尽管这是一个工作问题 几个月前 我刚写完一份规范 老板就会把它外包出去 因为资金紧张 所以我正在尝试自己做这件事 我是一个很弱的 C 编码员 如果 gcc 能输出一些运行时不会出现段错误的东西 或者有时根本没有任何东
  • 从 Spring MVC @RestController 返回视图

    As RestController是组成 Controller and ResponseBody 我相信如果我希望我的控制器同时工作 MVC 和 REST 控制器只需注释 RestController应该没事 那是对的吗 As RestCo
  • 从 App Store 中删除应用程序

    我按照以下步骤从 App Store 中删除了我的应用程序 但我没有看到任何 删除 选项 http msdn microsoft com en us library windows apps jj193601 aspx http msdn
  • 尝试创建一个脚本,如果提交者回答错误,该脚本会在表单提交时向提交者发送电子邮件

    我正在查看表单提交 如果提交者填写了任何错误的问题 则向提交者发送电子邮件 但脚本也会向所有输入正确的提交者发送电子邮件 我知道 if 脚本可以处理数字 就像我在另一个项目中使用它一样 但是当我将问题更改为 true false 时 它 似
  • 我应该使用哪个命名空间和程序集来声明共享项目中的转换器

    我应该使用哪个命名空间和程序集在 Xamarin 中的共享项目中声明转换器 对于该资源
  • 如何使用 Struts 预防 XSS 漏洞

    我们需要在 Struts 应用程序中添加反 XSS 支持 最具体地说 架构师要求所有用户输入在存储到数据库之前必须进行 清理 由于我不想重新发明方轮 我可以使用哪个 Java 库来实现此目的 以及把它放在哪里 理想情况下 它应该是可配置的
  • 在 docker 容器中使用 uwsgi 和 nginx 设置 Flask 应用程序

    我正在尝试在 Docker 容器中运行带有 Flask uwsgi 和 nginx 的 Docker 容器 我的 Dockerfile 看起来是这样的 FROM ubuntu 16 04 MAINTAINER Dockerfiles Ins
  • 如何更新推送通知的配置文件 - IOS

    我们正在开发一个IOS应用程序 我们想要实现推送通知 我已经浏览了苹果文档 并要求我的团队代理在iOS开发中心启用推送通知 他们似乎做到了 现在已经启用了 我已经在我的应用程序中注册了推送通知 如下所示 UIApplication shar
  • 寻找有关在 Windows 7 上安装应用程序的“正确”方法的文档

    我正在使用一些遗留应用程序 10 15 年 并试图找到有关在 Windows 7 上安装和运行它们 以及任何用户应用程序 的 正确 方法的指导 而无需完全的管理员权限 换句话说 可执行文件 只读文件应存放在何处 用户数据 读写文件应存放在何