禁止发表博彩类、私服、色情、赌博、诈骗、违法广告等一切国家法律禁止的内容,一经发现,立即禁言并清空帖子,严重者报公安机关处理!

Windows7软件开发示例:UAC、系统版本、权限

0
回复
293
查看
[复制链接]
发表于 2014-1-5 22:12:11 | 显示全部楼层 |阅读模式
Windows7之家(www.908098.com):Windows7软件要点示例:UAC、系统版本、权限
  本文作者:魏伟,微软MVP(微软最有价值专家),产品设计&系统架构师,研发的产品主要有电话会议服务、移动代理服务器、无线开发中间件等。

  看到Win7的酷炫功能流口水,已经忍不住想拥抱呢?别急,Win7的脾气可不好,要想拥抱它的新功能,我们的软件必须嫁给它——在Win7下能正常运行。,个人开发者开发的中小软件,功能相对简单,与系统的紧密程度普遍较低,添加一些Win7必要的正常运行的元素就OK啦!

嫁给Win7的必要条件

  我们必须要给软件添加的是系统版本检测和安装路径选择元素,为什么要考虑它们呢?

必要条件1:检测系统版本

  软件在运行初期需要判断操作系统的类型及版本号,并根据操作系统类型执行特定的代码,相同的功能在不同操作系统上可能会执行不同的代码。大多数软件的在Win7下无法正常运行都是因为判断操作系统版本失败造成的。

  当版本检测出错时,很多软件也会跟着出错,用户可能会发现双击软件图片后,什么反映都没有,或者可能会看到一个对话框“你必须运行在Microsoft Windows XP或更新版本”,但实际上计算机已经安装了Win7 。

必要条件2:适应用户权限

  Win7默认运行的是非管理员账号,权限相对较小。而软件的安装程序会往包括系统盘的Program Files、Windows安装目录、注册表中写入一些数据(软件在运行时可能会将一些用户数据保存到系统文件夹或注册表中),如果当前用户的权限不够,软件就无法正常入驻Win7。

  小知识: UAC是一种降低Windows用户默认权限的办法,这样会给用户带来安全性的提高,它可以一定程度上遏制了一些病毒的发作——关闭杀毒软件、启动复制及散播病毒进程、注入网游客户端、监听键盘操作从而盗窃密码。

  例如数据看似保存成功,在写入的地点却找不到,或者注销切换到另一个Windows用户时,无法找到保存的数据。引起这类问题的根源是Win7的UAC机制,它降低了Windows用户的默认权限,使得一些普通操作无法更改系统设置及系统保护的文件夹。

  小提示:软件要结合系统某些功能时,需要调用相应的API。API调用得当否,对软件运行非常关键,我们从下期开始结合Win7酷炫功能,单独介绍如何正确的调用。Win7最新的API,有Win7特有的任务栏个性化快捷菜单(Jump List)、程序图标轮廓效果(Icon Overlay)、程序图标进度条效果(Progress Bar)、标签式缩略图(Tabbed Thumbnail)和缩略图工具栏(Thumbnail Toolbar)……

“婚礼”必要的元素

  我们的软件要顺利嫁给Win7,在软件中要添加以下的元素。

1.代码检测操作系统版本号

在软件中添加判断操作系统是Win7 或2008 Server的代码:
C#
      if (Environment.OSVersion.Version > new Version(5, 1))
      {MessageBox.Show("Windows 7 or Windows 2008 Server","Operating System",
                      MessageBoxButtons.OK,MessageBoxIcon.Error);
            return;
      }

2.尽量将数据存储在非系统盘

  软件不要默认安装到系统盘,在编写软件安装路径时,要考虑这个。此外,还需要在软件中添加修改读写注册表的代码,使用HKEY_CURRENT_USERSoftware下的键值作为存储数据的结点:
        static void Main(string[] args)
        {
            var registryKey = Registry.CurrentUser.CreateSubKey(
                @"Softwaretest");
            registryKey.SetValue("name", "zswang");
            registryKey = Registry.CurrentUser.OpenSubKey(@"Softwaretest");
            Console.WriteLine(string.Format("{0}={1}rn",
               "name", registryKey.GetValue("name")));
        }

3.提高程序的运行权限

  如果用户使用了管理员身份进入系统,又希望把软件安装在系统盘,又该如何呢?需要判断用户权限的权限,简单的解决方案是添加清单文件。在可执行文件夹中找到与可执行文件相同名字且扩展名.manifest的文件,输入以下代码即可:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
  <assemblyIdentity version="1.0.0.0"
     processorArchitecture="X86"
     name="test"
     type="win32"/>
  <description>Description of your application</description>
  <!-- Identify the application security requirements. -->
  <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
    <security>
      <requestedPrivileges>
        <requestedExecutionLevel
          level="requireAdministrator"
          uiAccess="false"/>
        </requestedPrivileges>
       </security>
  </trustInfo>
</assembly>
Windows7之家(www.908098.com),凝聚你我他
关注官方微信

微信号:大白网

微博:大白网

QQ1群:4731622

QQ2群:4731622

全国服务热线:

QQ24485416

(工作日:周一至周五 9:00-16:00)
大理市
www@dali8.net

手机版-小黑屋- 大理白族|大理乡村旅游网|大理网|大理论坛|白族网|大理旅游网|大理信息网|大理生活网

技术支持:挖主机网络 Powered by大白网© 2006-2025 dalibaizu.com  滇ICP备19004088号 滇公网安备 53290102000530号