自动化测试读写64位操作系统的注册表


Posted in Javascript onAugust 15, 2016

非Web程序(桌面程序)的设置一般都存在注册表中。 给这些程序做自动化测试时, 需要经常要跟注册表打交道。 通过修改注册表来修改程序的设置。

本章介绍如何利用C#程序如何操作注册表, 特别是如何操作64位操作系统的注册表。

阅读目录

  1. 自动化测试经常需要修改注册表
  2. Windows注册表简介
  3. C#修改注册表
  4. 32位机器和64位机器注册表的区别
  5. C#程序访问64位操作系统的注册表

自动化测试经常需要修改注册表

很多系统的设置(比如:IE的设置)都是存在注册表中。 桌面应用程序的设置也是存在注册表中。 所以做自动化测试的时候,经常需要去修改注册表

Windows注册表简介

注册表编辑器在 C:\Windows\regedit.exe。   或者在运行中,运行"regedit". 就可以启动注册表编辑器。

注册表由主键,键,子键,值项构成。  如下图

主键中的:HKEY_CURRENT_USER和HKEY_LOCAL_MACHINE中的内容差不多,一个是当前用户的设置,一个是机器的设置。

 自动化测试读写64位操作系统的注册表

 C#修改注册表

C#修改注册表实在是太简单了,先添加 using Microsoft.Win32; 几行代码就搞定了,  看下面的实例, 读,增,删,改,操作都有了。

static void Main(string[] args)
  {
   // 实例, 修改IE主页
   RegistryKey localMachine = Registry.CurrentUser;
   RegistryKey sougou = localMachine.OpenSubKey(@"SOFTWARE\Microsoft\Internet Explorer\MAIN", true);
   // 获取IE 的主页
   string version = sougou.GetValue("Start Page").ToString();
   // 修改IE的主页 
   sougou.SetValue("Start Page", "http://www.cnblogs.com/", RegistryValueKind.String);

   // 修改Tanktest这个值项, 如不存在,则新建TankTest值项。
   sougou.SetValue("TankTest2", "1", RegistryValueKind.DWord);
   // 删除值项
   sougou.DeleteValue("TankTest2");
   
   // 新建子键
   sougou.CreateSubKey("This is subkey1");
   sougou.CreateSubKey("This is subkey2");
   
   // 删除子键
   sougou.DeleteSubKey("This is subkey1");
  }

32位操作系统和64位操作系统注册表的区别

上面的代码在32位的操作系统上运行没问题, 但是在64位操作系统中就不行了。

应用软件也有32位和64位之分。  在64位的操作系统中, 可以运行32位的应用程序和64位的应用程序。

如果在64位操作系统中安装32位的应用程序, 会安装到C:\Program Files(x86)\下。 启动任务管理器,你会看到32位的程序的进程名字后会带一个 ”*32“, 如下图:

自动化测试读写64位操作系统的注册表

注意: 64位操作系统中: 

64位的程序的注册表还在: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer

32位的程序的注册表而是在: HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Internet Explorer

C#程序访问64位操作系统的注册表

 C#的程序都是32位的,访问注册表的时候,会访问HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\, 而访问不到HKEY_LOCAL_MACHINE\SOFTWARE\

.NET 3.5以前 C#程序需要通过Win32API函数(要写几百行代码)才能访问64位操作系统的注册表。

.NET 4.0 后访问64位操作系统的注册表很简单了。

static void Main(string[] args)
  {
   // 修改64位操作系统的注册表
   // 修改IE的首页
   // 通过RegistryView 来指定是64位操作系统还是32位
   RegistryKey localKey = RegistryKey.OpenBaseKey(Microsoft.Win32.RegistryHive.CurrentUser, RegistryView.Registry64);
   localKey = localKey.OpenSubKey(@"SOFTWARE\Microsoft\Internet Explorer\Main", true);
   if (localKey != null)
   {
    localKey.SetValue("Start Page", "http://www.cnblogs.com");
   }
  }

以上就是自动化测试读写64位操作系统的注册表的资料,后续继续整理相关资料,谢谢大家对本站的支持!

Javascript 相关文章推荐
使用prototype.js进行异步操作
Feb 07 Javascript
js实例属性和原型属性示例详解
Nov 23 Javascript
跟我学习javascript的arguments对象
Nov 16 Javascript
跟我学习javascript的prototype使用注意事项
Nov 17 Javascript
尝试动手制作javascript放大镜效果
Dec 25 Javascript
jQuery中选择器的基础使用教程
May 23 Javascript
深入理解js函数的作用域与this指向
May 28 Javascript
angular+webpack2实战例子
May 23 Javascript
Node.js 基础教程之全局对象
Aug 06 Javascript
vue-router路由懒加载的实现(解决vue项目首次加载慢)
Aug 28 Javascript
微信小程序如何播放腾讯视频的实现
Sep 20 Javascript
JavaScript, select标签元素左右移动功能实现
May 14 Javascript
Wireshark基本介绍和学习TCP三次握手
Aug 15 #Javascript
JavaScript中removeChild 方法开发示例代码
Aug 15 #Javascript
jQuery解决input元素的blur事件和其他非表单元素的click事件冲突问题
Aug 15 #Javascript
Web安全测试之XSS实例讲解
Aug 15 #Javascript
js中获取jsp表单中radio类型的值简单实例
Aug 15 #Javascript
卸载安装Node.js与npm过程详解
Aug 15 #Javascript
jQuery Easyui Tabs扩展根据自定义属性打开页签
Aug 15 #Javascript
You might like
PHP __autoload()方法真的影响性能吗?
2012/03/30 PHP
php将图片保存入mysql数据库失败的解决方法
2014/12/27 PHP
PHP使用第三方即时获取物流动态实例详解
2017/04/27 PHP
浅谈thinkphp5 instance 的简单实现
2017/07/30 PHP
YUI 读码日记之 YAHOO.lang.is*
2008/03/22 Javascript
js 纯数字不重复排列的另类方法
2010/07/17 Javascript
javascript 基础篇2 数据类型,语句,函数
2012/03/14 Javascript
javascript自动改变文字大小和颜色的效果的小例子
2013/08/02 Javascript
JavaScript实现的圆形浮动标签云效果实例
2015/08/06 Javascript
使用snowfall.jquery.js实现爱心满屏飞的效果
2017/01/05 Javascript
React中ES5与ES6写法的区别总结
2017/04/21 Javascript
windows下vue-cli导入bootstrap样式
2017/04/25 Javascript
vue引入js数字小键盘的实现代码
2018/05/14 Javascript
详解Vue SPA项目优化小记
2018/07/03 Javascript
详解vue axios用post提交的数据格式
2018/08/07 Javascript
JS使用iView的Dropdown实现一个右键菜单
2019/05/06 Javascript
angular6开发steps步骤条组件
2019/07/04 Javascript
你知道JavaScript Symbol类型怎么用吗
2020/01/08 Javascript
three.js 利用uv和ThreeBSP制作一个快递柜功能
2020/08/18 Javascript
JavaScript 声明私有变量的两种方式
2021/02/05 Javascript
[03:09]DOTA2亚洲邀请赛 LGD战队出场宣传片
2015/02/07 DOTA
Python3基础之基本运算符概述
2014/08/13 Python
Python切换pip安装源的方法详解
2016/11/18 Python
Python 实现某个功能每隔一段时间被执行一次的功能方法
2018/10/14 Python
IntelliJ IDEA安装运行python插件方法
2018/12/10 Python
基于Python快速处理PDF表格数据
2020/06/03 Python
Sport-Thieme荷兰:购买体育用品
2019/08/25 全球购物
大学秋游活动方案
2014/02/11 职场文书
单位租房协议书样本
2014/10/30 职场文书
2015社区健康教育工作总结
2015/05/20 职场文书
2015年留守儿童工作总结
2015/05/22 职场文书
水浒传读书笔记
2015/06/25 职场文书
2016年5月份红领巾广播稿
2015/12/21 职场文书
MySQL创建管理LIST分区
2022/04/13 MySQL
Elasticsearch 聚合查询和排序
2022/04/19 Python
JavaScript原型链中函数和对象的理解
2022/06/16 Javascript