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

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

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

  阅读目录

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

  Windows注册表简介

  C#修改注册表

  32位机器和64位机器注册表的区别

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

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

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

  Windows注册表简介

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

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

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

  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位的程序的注册表还在: 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");

}

}

最新内容请见作者的GitHub页:http://qaseven.github.io/

时间: 2024-09-10 19:12:15

自动化测试之读写64位操作系统的注册表的相关文章

C# 32位程序访问64位系统注册表

原文:C# 32位程序访问64位系统注册表 我的上一篇文章已经阐述了"32位程序和64位程序在64位平台上读\写注册表的区别",那么接下来将要回答上篇所留下来的一个问题:32位程序如何访问64位系统注册表(即:64位程序所访问的注册表位置). 我们已经知道: ①:本机模式 64 位程序运行在纯模式下,并且访问键和存储在以下注册表子键中的值:HKEY_LOCAL_MACHINE\Software ②:32 位程序运行在 WOW64 模式下,并且访问键和值存储在以下注册表子项中:HKEY_

64位读取注册表与32位的区别

有一个读取注册表信息的程序  if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, subkeystring , 0, KEY_READ, &hKey) == ERROR_SUCCESS)/ ,在32位下完全正常,但是在64位返回值正确,但就是读不到东西.后来单步发现读不到东西,就搜64位读注册表失败,发现需要加 if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, subkeystring , 0,KEY_READ|KEY_WOW64_64KEY, &am

windows7/8 64位笔记本电脑注册表进入方法

方法1 ,传统的方法进入注册表 1.如图所示,点击左下角的"开始"按钮. 2.然后在开始中找到"搜索"然后在弹出搜索框中输入"regedit"回车. 3.这样就快速进入了你系统的注册表中了. 方法2:通用方法  1.我们先在电脑桌面创建一个空白的的.txt文件. 2.然后在txt文件中输入"start c:/windows/regedit.exe"然后保存. 3.现在把刚才的txt文件的后xxc缀名改为".bat&q

win7 64位无法注册ocx

问题描述 win7 64位无法注册ocx 不过放在system32或者syswow64目录来调用regsvr32都报[Window Title] RegSvr32 [Content] 模块"c:WindowsSysWOW64ActiveXDemo.ocx"可能与您正在运行的 Windows 版本不兼容.检查该模块是否与 regsvr32.exe 的 x86 (32 位)或 x64 (64 位)版本兼容. [确定] 解决方案 下载这个地址内容http://pan.baidu.com/s/

AutoCAD 2014简体中文破解版(含32位、64位以及注册机)

AutoCAD 2014简体中文破解版(含32位.64位以及注册机) AutoCAD 2014最大的改进就是新增了许多特性,例如新增了连接功能,这样有利于推动项目合作者协作,加快日常工作流程:同时其新增的实景地图功能,将您的设计理念运用到真实的环境,能让你更早更精确的感受到真实的设计效果,同时还新增了win8触屏操作,文件格式命行增强等等. AutoCAD 2014简体中文版新特性   1,增强连接性,提高合作设计效率 在autocad 2014中集成有类似QQ一样的通讯工具,可以在设计时,通过

读写64位应用程序内存的问题

问题描述 小弟最近在做一个项目,要读取一个64位程序的内存数据,发现起始地址是140000000,使用ReadProcessMemory读取一直返回0,求大神支招,百度谷歌搜不到有帮助的帖子,还望大神指点一二啊~跪谢了! 解决方案 解决方案二:不知道你的代码是怎么写的,会不会是因为权限的问题,你可以使用GetLastError输出一下错误信息.解决方案三:输出一下错误信息看看吧.不然不是很清楚怎么回事.

关于SAP对64位操作系统的支持常问题

问题描述 FrequentlyAskedQuestions:Supportfor64-BitOperatingSystemsThisDocumentProvidesAnswerstoFrequentlyAskedQuestionsAbout:WhydoesSAPde-support32-bitserveroperatingsystemsfornewreleasesfrom2007onwards?Wehaveseveral100desktopPCs32-Bit,willwehavetoreplac

使用.netFx4.0提供的方法解决32位程序访问64位系统的64位注册表

原文:使用.netFx4.0提供的方法解决32位程序访问64位系统的64位注册表   我们知道目标平台是32位的程序运行在64位的系统上,去访问部分注册表的时候系统自动重定向到win32node节点对应的项去了.但是做过安装程序开发人员可能遇到过"需要去掉重定向"的问题,即直接访问64位程序的注册表. 网上有很多winAPI的方法,关闭注册表的重定向稍微复杂.(关闭文件系统的重定向稍微简单些,搬过来就可以用:关闭注册表的重定向我现在没看懂.) 我这里提供的方法不需要关闭重定向,也不需要

VB的32位程序在64位系统中出现文件和注册表自动转向的解决方法_vb

通常用VB 写的程序在32位系统上可以正常的运行,但到了64位系统中虽然可以运行但是无法修改OEM信息.经过查找原因可以发现,当我们在访问文件夹"SYSTEM32"的时候系统会自动转向到文件夹"SYSWOW64"下,当我们在访问某些注册表键值的时候,和文件转向类似,系统也会自动地把程序的访问转向到Wow6432Node下面. 先来谈谈文件系统的转向,查找了一些资料,并没有VB相关的资料,但是可以查到2个相关函数:Wow64DisableWow64FsRedirect