ID #8845

Windows 7开发:安装程序检测 - 本机

目标

在本实验中,您将学习如何:

确定 Windows Vista 及更高版本上与 安装程序检测相关的问题

修复安装程序检测问题

系统要求

要完成本实验,您必须拥有以下软件:

Microsoft Visual Studio 2008 SP1

Microsoft Windows 7

练习 #1 :安装程序检测问题

在本练习中,您将看到一个被错误地 标识为安装程序的“旧”可执行文件,而实际上它只是一个不需要管理权限的普 通应用程序。

任务 1 – 确保 UAC 处于活动状态

在本任务中,必须确 认用户账户控制 (User Account Control, UAC) 处于活动状态。只有在这种情况下才能发生 问题。

1. 单击“开始”:

a. 单击“控制面板”。

b. 单击 User Accounts and Family Safety 。

c. 单击 User Accounts 。

d. 单击 Change User Account Control Settings 。将出现一个如下的对话框。

帮助

还有一种方法可选,单击“开始”,单击“运行 ”,键入“ UAC ”。然后单击 Change User Account Control Settings 。

2. 确保 滑块位于如图所示的默认级别(也可以将其设置为其他级别,但不能是 Never notify ,这 将禁用 UAC )。

3. 单击 OK 。

任务 2 :确定问题

1. 使用 Windows 资源管理器导航到 BrokenStockUpdater\Debug 文件夹。

2. 切换到中或大图标视图,您会发现 BrokenNativeStockUpdater.Exe 文件上方多了一个盾牌图标,如下图所示:

3. 双击 该文件确认出现 UAC 提升权限提示。

这不是我们希望出现的行为,这一点从文件名 中包含的“ update ”就可以看出(它是一个不带清单的 32 位应用程序)。带 有“ setup ”、“ install ”和“ update ”的文件都 是同样的道理。

练习 #2 :解决问题

上一个任务中确定的问题可以通过添加 一个外部或内部清单加以解决。

任务 1 :添加一个外部清单

1. 使用 Windows 资源管理器导航到 BrokenStockUpdater\Debug 文件夹。

a. 右键单击空白 位置。

b. 指向“新建”。

c. 单击“文本文档”。

d. 将其命名为 BrokenNativeStockUpdate.Exe.manifest 。

注意,只要出现 带有该名称的文件,即使文件为空,盾牌图标也会消失:

2. 使用记事本或者其他文本编辑器打开清单文件。

3. 输入以下文本:

XML

<?xml version="1.0" encoding="utf-8"?>
<asmv1:assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft- com:asm.v1" xmlns:asmv1="urn:schemas-microsoft-com:asm.v1"  xmlns:asmv2="urn:schemas-microsoft-com:asm.v2"  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
   <assemblyIdentity version="1.0.0.0" name="StockUpdater"/>
   <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
     <security>
      <requestedPrivileges xmlns="urn:schemas- microsoft-com:asm.v3">
        <requestedExecutionLevel  level="asInvoker" uiAccess="false" />
       </requestedPrivileges>
    </security>
   </trustInfo>
</asmv1:assembly>

帮助

关键信息是 level 属性。值 asInvoker 表明 .exe 文件使用与创建人(例如, Windows 资源管理器)相同的权限运行,这表示这个 .exe 文件不是安装程序,而是一个常规程序。 另一个相关级别是 requireAdministrator ,表示该 .exe 文件需要管理权限才能正常运行 。例如,这是一个实际的安装程序并需要访问授权位置,如 \Windows\System32 文件夹或 HKEY_LOCAL_MACHINE\Software 键。

4. 保存文件。

5. 退出文本编辑器。

6. 双击 .exe 文件验证更改有效。

这一次,您应该看不到 UAC 提升权限提示,应用程序可以正常运行。

任务 2 :添加嵌入清单

1. 使用 Visual Studio 2008 打开位于 BrokenStockUpdater 文件夹中的 BrokenStockUpdater.sln 解决方案文件。

2. 研究 BrokenNativeStockUpdater 项目。

该项目没有清单,要验证这一点:

3. 单击 Project 菜单。

4. 单击 Properties 。

5. 在左列中,找到名为 Linker 的节点。

6. 打开它并找到名为 Manifest File 的节点。

在右侧窗格中,将 Generate Manifest 设置为 No ,如以下截屏所示:

帮助

Visual Studio 2008 的默认设置是生成清单文件。

7. 将 Generate Manifest 设置更改为 Yes 。

8. 使用 UAC Execution Level 设置来设置需要的级别( asInvoker 、 requireAdministrator 或 highestAvailable ):

9. 在左侧窗格中,打开名为 Manifest Tool 的节点。

10. 单击名为 Input and Output 的节点。

右侧窗格中的 Embed Manifest 设置控制是将清单作为 Win32 资源嵌入还是保留为一个 松散的文件(与上一个任务一样)。

11. 选择 Yes 将清单作为资源嵌入,使该执行文件不需要携带其他清单文件,如下面的 截屏所示:

12. 重建解决方案并删除上一个任务中的清单。

确保盾牌按钮已经消失,并且在双击应用程序时不会出现任何 UAC 提升权限提示。

修复的解决方案位于 FixedStockUpdater 文件夹的 FixedStockUpdater.sln 中。

小结

在本实验中,您学习了安装程序检测的工作原理。还了解了文件名中包含特定关键字的 32 位映像可能导致不必要的权限提升。也可能出现相反的问题,需要提升权限的安装程序无 法自动提升。


2011-07-02 10:05
阅读:
I'm VC , Just U know Y
本站部分文章来源于互联网,版权归原作者所有。

延伸阅读:

WCF分布式开发步步为赢(14):WCF安全编程--基本概念

开发项目过程中辅助方法好处多多

WCF分布式开发步步为赢(15)

WCF分布式开发步步为赢 - 目录

Windows 7开发:多点触摸 - 管理(动手实验)(上