本文转载自:http://79100812.blog.51cto.com/2689556/1413486 作者:leslies2
非常感谢博主的不辞辛苦,图文并举,很详尽的一篇关于C#程序与注册表的介绍。
属性 | 说明 |
---|---|
ClassesRoot | 定义文档的类型(或类)以及与那些类型关联的属性。该字段读取 Windows 注册表基项 HKEY_CLASSES_ROOT。 |
CurrentConfig | 包含有关非用户特定的硬件的配置信息。该字段读取 Windows 注册表基项 HKEY_CURRENT_CONFIG。 |
CurrentUser | 包含有关当前用户首选项的信息。该字段读取 Windows 注册表基项 HKEY_CURRENT_USER |
DynData | 已过时。包含动态注册表数据。该字段读取 Windows 注册表基项 HKEY_DYN_DATA。 |
LocalMachine | 包含本地计算机的配置数据。该字段读取 Windows 注册表基项 HKEY_LOCAL_MACHINE。 |
PerformanceData | 包含软件组件的性能信息。该字段读取 Windows 注册表基项 HKEY_PERFORMANCE_DATA。 |
Users | 包含有关默认用户配置的信息。该字段读取 Windows 注册表基项 HKEY_USERS。 |
方法 | 说明 |
---|---|
GetValue (String, String, Object) | 检索与指定的注册表项中的指定名称关联的值。如果在指定的项中未找到该名称,则返回您提供的默认值;或者,如果指定的项不存在,则返回 null。 |
SetValue(String, String, Object) | 设置指定的注册表项的指定名称/值对。如果指定的项不存在,则创建该项。 |
SetValue(String, String, Object, RegistryValueKind) | 通过使用指定的注册表数据类型,设置该指定的注册表项的名称/值对。如果指定的项不存在,则创建该项。 |
属性 | 说明 |
---|---|
Handle | 获取一个 SafeRegistryHandle 对象,该对象表示当前 RegistryKey 对象封装的注册表项。 |
Name | 检索项的名称。 |
SubKeyCount | 检索当前项的子项数目。 |
ValueCount | 检索项中值的计数。 |
View | 获取用于创建注册表项的视图。 |
方法 | 说明 |
---|---|
Close() | 关闭该项,如果该项的内容已修改,则将该项刷新到磁盘。 |
CreateSubKey(String) | 创建一个新子项或打开一个现有子项以进行写访问。 |
CreateSubKey(String, RegistryKeyPermissionCheck) | 使用指定的权限检查选项创建一个新子项或打开一个现有子项以进行写访问。 |
CreateSubKey(String, RegistryKeyPermissionCheck, RegistryOptions) | 使用指定的权限检查和注册表选项,创建或打开一个用于写访问的子项。 |
CreateSubKey(String, RegistryKeyPermissionCheck, RegistrySecurity) | 使用指定的权限检查选项和注册表安全性创建一个新子项或打开一个现有子项以进行写访问。 |
CreateSubKey(String, RegistryKeyPermissionCheck, RegistryOptions, RegistrySecurity) | 使用指定的权限检查选项、注册表选项和注册表安全性,创建或打开一个用于写访问的子项。 |
DeleteSubKey(String) | 删除指定的子项。 |
DeleteSubKey(String, Boolean) | 删除指定的子项,并指定在找不到该子项时是否引发异常。 |
DeleteSubKeyTree(String) | 递归删除子项和任何子级子项。 |
DeleteSubKeyTree(String, Boolean) | 以递归方式删除指定的子项和任何子级子项,并指定在找不到子项时是否引发异常。 |
DeleteValue(String) | 从此项中删除指定值。 |
DeleteValue(String, Boolean) | 从此项中删除指定的值,并指定在找不到该值时是否引发异常。 |
Flush() | 将指定的打开注册表项的全部特性写到注册表中。 |
GetSubKeyNames() | 检索包含所有子项名称的字符串数组。 |
GetValue(String) | 检索与指定名称关联的值。如果注册表中不存在名称/值对,则返回null。 |
GetValue(String, Object) | 检索与指定名称关联的值。如果未找到名称,则返回您提供的默认值。 |
GetValue(String, Object, RegistryValueOptions) | 检索与指定的名称和检索选项关联的值。如果未找到名称,则返回您提供的默认值。 |
SetValue(String, Object) | 设置指定的名称/值对。 |
1
2
3
4
5
6
7
8
9
10
11
12
13
|
static void Main( string [] args)
{
//获取Machine根项
RegistryKey machine = Registry.LocalMachine;
//打开SOFTWARE项
RegistryKey software = machine.OpenSubKey( "SOFTWARE" , true );
//新项MyApplication项
RegistryKey myApplication = software.CreateSubKey( "MyApplication" );
RegistryKey subkey = myApplication.CreateSubKey( "Path" );
//新建键值,当键值名称为空时,将被设置为默认值
subkey.SetValue( null , Application.StartupPath);
subkey.SetValue( "AppPath" , Application.UserAppDataPath);
}
|
1
2
3
4
5
6
7
8
|
static void Main( string [] args)
{
//打开注册表子项
RegistryKey key = Registry.LocalMachine
.OpenSubKey( "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run" , true );
//增加开机启动项
key.SetValue( "Cmd" , "C:\\Windows\\System32\\cmd.exe" );
}
|
1
2
3
4
5
|
static void Main( string [] args)
{
Console.WriteLine( "Hello World" );
Console.ReadKey();
}
|
1、在HKEY_CLASSES_ROOT下添加项MyApplication.
2、修改MyApplication项下的默认值输入"URL:(可为空)"。
3、在MyApplication项下再添加一个键值"URL Protocol"。(必要健,否则在IE浏览器中可能无法运行)
4、在MyApplication项下新建项"shell"
5、在shell项下新建项"open"
6、在open项下新建项"command"
7、修改command项的默认键值为MyApplication应用程序的路径 "D:\C# Projects\MyApplication.exe" "%1"
1
2
3
4
5
6
7
8
|
< html xmlns = "http://www.w3.org/1999/xhtml" >
< head >
......
head >
< body >
< a href = "MyApplication://command" >Hello World a >
body >
html >
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
|
[DataContract]
public class Person
{
[DataMember]
public int ID;
[DataMember]
public string Name;
[DataMember]
public int Age;
}
class Program
{
static void Main( string [] args)
{
if (args != null )
{
//获取输入参数
string data = args[0].Split( '&' )[1];
//把JSON转换成Person对象
Person person = GetPerson(data);
//数据显示
Console.WriteLine(person.Name + "'s age is:" + person.Age);
Console.ReadKey();
}
}
//数据转换
static Person GetPerson( string data)
{
DataContractJsonSerializer serializer = new
DataContractJsonSerializer( typeof (Person));
MemoryStream stream = new MemoryStream(Encoding.Unicode.GetBytes(data));
Person person = (Person)serializer.ReadObject(stream);
stream.Close();
return person;
}
}
|
方法 | 说明 |
---|---|
Commit | 在派生类中重写时,完成安装事务。 |
Install | 在派生类中被重写时,执行安装。 |
OnAfterInstall | 引发 AfterInstall 事件。 |
OnAfterRollback | 引发 AfterRollback 事件。 |
OnAfterUninstall | 引发 AfterUninstall 事件。 |
OnBeforeInstall | 引发 BeforeInstall 事件。 |
OnBeforeRollback | 引发 BeforeRollback 事件。 |
OnBeforeUninstall | 引发 BeforeUninstall 事件。 |
OnCommitted | 引发 Committed 事件。 |
OnCommitting | 引发 Committing 事件。 |
Rollback | 在派生类中重写时,还原计算机的安装前状态。 |
Uninstall | 在派生类中重写时,移除安装。 |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
|
[RunInstaller( true )]
public partial class MyInstaller : Installer
{
public MyInstaller()
: base ()
{
//绑定完成安装事件的处理方法
this .AfterInstall += new InstallEventHandler(OnAfterInstall);
}
/// 加入安装完成后的处理方法
protected override void OnAfterInstall( object sender, InstallEventArgs e)
{
CreateSn();
}
//在完成安装后建立一个sn文件,对该应用程序进行标识
private void CreateSn()
{
var regKey = Registry.ClassesRoot.OpenSubKey( "MyApplication" , true );
if (regKey != null )
{
//根据注册表中的Path键值,获取系统在客户端的安装路径
string path = regKey.GetValue( "Path" ).ToString();
//建立sn文件
string snPath = path + "sn" ;
StreamWriter writer = new StreamWriter(snPath, true , Encoding.Unicode);
writer.Write(Guid.NewGuid().ToString());
writer.Close();
}
}
/// 重写安装过程方法
public override void Install(IDictionary stateSaver)
{
base .Install(stateSaver);
}
/// 重写卸载方法
public override void Uninstall(IDictionary savedState)
{
base .Uninstall(savedState);
}
/// 重写回滚方法
public override void Rollback(IDictionary savedState)
{
base .Rollback(savedState);
}
//重写提交方法
public override void Commit(IDictionary savedState)
{
base .Commit(savedState);
}
}
|
1
2
3
4
5
6
7
8
|
< body >
< script type = "text/javascript" >
window.onload = function () {
var link = "MyApplication://command&{'ID':'1','Name':'Rose','Age':'26'}";
location.href = link;
}
script >
body >
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
|
[DataContract]
public class Person
{
public Person( int id, string name, int age)
{
ID = id;
Name = name;
Age = age;
}
[DataMember]
public int ID;
[DataMember]
public string Name;
[DataMember]
public int Age;
}
public class MyHandler : IHttpHandler
{
public bool IsReusable
{
get { return true ; }
}
public void ProcessRequest(HttpContext context)
{
//通过QueryString获取id
string data = context.Request.QueryString[ "id" ];
if (data != null )
{
int id = int .Parse(data);
//根据id进行数据查找
foreach ( var person in DataSource())
{
if (person.ID == id)
{
//把Person对象转化为JSON数据
string json = ConvertToJson(person);
//输出自定义协议路径
context.Response.Write(GetUrl(json));
}
}
}
}
//获取自定义协议路径
private string GetUrl( string json)
{
return "MyApplication://command&" + json;
}
//把Person对象转化为JSON
private string ConvertToJson(Person person)
{
DataContractJsonSerializer serializer = new
DataContractJsonSerializer( typeof (Person));
MemoryStream stream = new MemoryStream();
serializer.WriteObject(stream, person);
byte [] bytes = stream.ToArray();
stream.Close();
return Encoding.ASCII.GetString(bytes);
}
//模拟数据源
private IList
{
IList new List
Person person1 = new Person(1, "Rose" , 34);
list.Add(person1);
......
return list;
}
}
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
< head >
< title > title >
< script src = "Scripts/jquery-1.8.2.min.js" type = "text/javascript" > script >
head >
< body >
< a name = "send" id = "send" href = "#" >GetPerson a >
< script type = "text/javascript" >
$(function () {
$('#send').click(function () {
$.ajax({
type: "GET",
url: "MyHandler.ashx?id=1",
data: null,
dataType: null,
success: function (data) {
location.href = data;
}
});
});
});
script >
body >
html >
|