自动化测试读写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 相关文章推荐
JS+CSS实现可拖动的弹出提示框
Feb 16 Javascript
Three.js学习之文字形状及自定义形状
Aug 01 Javascript
js 判断各种数据类型的简单方法(推荐)
Aug 29 Javascript
网页瀑布流布局jQuery实现代码
Oct 21 Javascript
详解Vue2.0之去掉组件click事件的native修饰
Apr 20 Javascript
浅谈PDF.js使用心得
Jun 07 Javascript
在vue2.0中引用element-ui组件库的方法
Jun 21 Javascript
对Vue- 动态元素属性及v-bind和v-model的区别详解
Aug 27 Javascript
socket在egg中的使用实例代码详解
May 30 Javascript
jquery实现两个div中的元素相互拖动的方法分析
Apr 05 jQuery
精读《Vue3.0 Function API》
May 20 Javascript
Vue向后台传数组数据,springboot接收vue传的数组数据实例
Nov 12 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
FireFox浏览器使用Javascript上传大文件
2013/10/30 PHP
PHP中foreach()用法汇总
2015/07/02 PHP
两种php给图片加水印的实现代码
2020/04/18 PHP
ThinkPHP5.1框架页面跳转及修改跳转页面模版示例
2019/05/06 PHP
PHP设计模式之数据访问对象模式(DAO)原理与用法实例分析
2019/12/12 PHP
Sample script that deletes a SQL Server database
2007/06/16 Javascript
分享一个我自己写的ToolTip提示插件(附源码)
2013/01/20 Javascript
jquery选择器-根据多个属性选择示例代码
2013/10/21 Javascript
JS实现仿苹果底部任务栏菜单效果代码
2015/08/28 Javascript
Javascript使用function创建类的两种方法(推荐)
2016/11/19 Javascript
Bootstrap模态窗口源码解析
2017/02/08 Javascript
fckeditor部署到weblogic出现xml无法读取及样式不能显示问题的解决方法
2017/03/24 Javascript
解决vue+webpack打包路径的问题
2018/03/06 Javascript
React为 Vue 引入容器组件和展示组件的教程详解
2018/05/03 Javascript
jquery分页插件pagination使用教程
2018/10/23 jQuery
如何用JavaScript实现功能齐全的单链表详解
2019/02/11 Javascript
微信小程序左右滚动公告栏效果代码实例
2019/09/16 Javascript
[33:15]2018DOTA2亚洲邀请赛3月30日 小组赛B组 VP VS Mineski
2018/03/31 DOTA
python实现每次处理一个字符的三种方法
2014/10/09 Python
在Apache服务器上同时运行多个Django程序的方法
2015/07/22 Python
python内置函数:lambda、map、filter简单介绍
2017/11/16 Python
Python数据处理numpy.median的实例讲解
2018/04/02 Python
python爬虫获取小区经纬度以及结构化地址
2018/12/30 Python
对python 多线程中的守护线程与join的用法详解
2019/02/18 Python
Python中print函数简单使用总结
2019/08/05 Python
Python使用gluon/mxnet模块实现的mnist手写数字识别功能完整示例
2019/12/18 Python
Python嵌入C/C++进行开发详解
2020/06/09 Python
CSS3 创建网页动画实现弹跳球动效果
2018/10/30 HTML / CSS
学术会议欢迎词
2014/01/09 职场文书
工作人员思想汇报
2014/01/09 职场文书
2014小学年度工作总结
2014/12/20 职场文书
2015年父亲节活动总结
2015/02/12 职场文书
你对自己的信用报告有过了解吗?
2019/07/09 职场文书
python基于scrapy爬取京东笔记本电脑数据并进行简单处理和分析
2021/04/14 Python
Python实现简单的俄罗斯方块游戏
2021/09/25 Python
SQL Server使用CROSS APPLY与OUTER APPLY实现连接查询
2022/05/25 SQL Server