自动化测试读写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 相关文章推荐
url参数中有+、空格、=、%、&、#等特殊符号的问题解决
May 15 Javascript
利用jQuery简单实现产品展示图片左右滚动功能(示例代码)
Jan 02 Javascript
jquery获取元素索引值index()示例
Feb 13 Javascript
js动态控制table的tr、td增加及删除的具体实现
Apr 30 Javascript
让checkbox不选中即将选中的checkbox不选中
Jul 11 Javascript
轻松使用jQuery双向select控件Bootstrap Dual Listbox
Dec 13 Javascript
易被忽视的js事件问题总结
May 14 Javascript
微信小程序遇到修改数据后页面不渲染的问题解决
Mar 09 Javascript
详解基于Angular4+ server render(服务端渲染)开发教程
Aug 28 Javascript
vue2.0 elementUI制作面包屑导航栏
Feb 22 Javascript
vue.js中使用echarts实现数据动态刷新功能
Apr 16 Javascript
解决vue中axios设置超时(超过5分钟)没反应的问题
Sep 04 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加速的eAccelerator dll支持文件打包下载
2007/09/30 PHP
discuz Passport 通行证 整合笔记
2008/06/30 PHP
php截取utf-8中文字符串乱码的解决方法
2010/03/29 PHP
CodeIgniter图像处理类的深入解析
2013/06/17 PHP
解析mysql中UNIX_TIMESTAMP()函数与php中time()函数的区别
2013/06/24 PHP
smarty缓存用法分析
2014/12/16 PHP
php7基于递归实现删除空文件夹的方法示例
2017/06/15 PHP
PHP实现登陆并抓取微信列表中最新一组微信消息的方法
2017/07/10 PHP
tp5框架的增删改查操作示例
2019/10/31 PHP
Yii框架 session 数据库存储操作方法示例
2019/11/18 PHP
jquery 常用操作整理 基础入门篇
2009/10/14 Javascript
基于jQuery实现的水平和垂直居中的div窗口
2011/08/08 Javascript
innerHTML与jquery里的html()区别介绍
2012/10/12 Javascript
jQuery中:submit选择器用法实例
2015/01/03 Javascript
JavaScript中的闭包
2016/02/24 Javascript
js仿支付宝填写支付密码效果实现多方框输入密码
2016/03/09 Javascript
json的使用小结
2016/06/08 Javascript
js HTML5手机刮刮乐代码
2020/09/29 Javascript
使用UrlConnection实现后台模拟http请求的简单实例
2017/01/04 Javascript
vue移动端裁剪图片结合插件Cropper的使用实例代码
2017/07/10 Javascript
微信小程序首页的分类功能和搜索功能的实现思路及代码详解
2018/09/11 Javascript
js实现动态增加文件域表单功能
2018/10/22 Javascript
如何为vue的项目添加单元测试
2018/12/19 Javascript
Vue服务端渲染实践之Web应用首屏耗时最优化方案
2019/03/22 Javascript
原生js实现自定义滚动条
2021/01/20 Javascript
微信小程序组件生命周期的踩坑记录
2021/03/03 Javascript
[06:45]DOTA2卡尔工作室 英雄介绍幻影长矛手篇
2013/07/12 DOTA
Python日志模块logging简介
2015/04/13 Python
pandas中Timestamp类用法详解
2017/12/11 Python
Python面向对象之继承和组合用法实例分析
2018/08/27 Python
分析运行中的 Python 进程详细解析
2019/06/22 Python
卡骆驰新加坡官网:Crocs新加坡
2018/06/12 全球购物
美国购买当代和现代家具网站:MODTEMPO
2018/07/20 全球购物
运输企业安全生产责任书
2014/07/28 职场文书
2015初中生物教研组工作总结
2015/07/21 职场文书
python Tkinter的简单入门教程
2021/04/11 Python