一 :编程思想
1、创建启动盘
插入要创建的启动盘,程序自动检测光驱中光盘,利用wmi(windows管理架构:windows management instrumentation)读取该光盘的序列号(具有唯一性),把该序列号写入注册表。
2、验证
程序执行时,自动检测光驱中的光盘,利用wmi获取序列号,然后读取注册表中先前写入的序列号,二者比较,相同则程序启动成功,否则提示插入启动盘。
二 :相关知识
1、 什么是wmi?
wmi(windows管理架构:windows management instrumentation)是microsoft基于web的企业管理(wbem)和 desktop management task force(dmtf)工业标准的实现. 就是一种基于标准的系统管理的开发接口,这组接口用来控制管理计算机. 它提供了一种简单的方法来管理和控制系统资源.如果你想深入了解他,可以参考micorosft platform sdk . 在这我们只是通过它实现一个简单的功能, 得到我们系统中光盘的相关信息.[ 我们需要使用system.management名字空间下提供的类来实现.]。
2、 如何在c#中操作注册表
使用vc,vb等语言操作注册表的例子已经有很多了,其实在c#里操作注册表更加的简单方便。下面的例子就提供了在c#里操作注册表的方法:
using microsoft.win32;
using system.diagnostics;
private void access_registry()
{
// 在hkey_local_machine/software下建立一新键,起名为cddrivesn
registrykey key = registry.localmachine.opensubkey("software", true);
// 增加一个子键
registrykey newkey = key.createsubkey("cddrivesn");
// 设置此子键的值
newkey.setvalue("cddrivesn", "123456789");
// 从注册表的其他地方获取数据
// 找出你的cpu
registrykey pregkey = registry.localmachine;
pregkey= pregkey.opensubkey("hardware//description//system//centralprocessor//0");
object val = pregkey.getvalue("vendoridentifier");
debug.writeline("the central processor of this machine is:"+ val);
// 删除键值
registrykey delkey = registry.localmachine.opensubkey("software", true);
delkey.deletesubkey("cddrivesn");
}
三、编写代码如下
创建启动盘
using system;
using system.drawing;
using system.collections;
using system.componentmodel;
using system.windows.forms;
using system.data;
using system.management;
using system.diagnostics;
using microsoft.win32;
namespace at_regcdrom
{
///
/// form1 的摘要说明。
///
public class form1 : system.windows.forms.form
{
///
/// 必需的设计器变量。
///
private system.componentmodel.container components = null;
private system.windows.forms.label label1;
private system.windows.forms.button button1;
private static string cdromsn;
public form1()
{
//
// windows 窗体设计器支持所必需的
//
initializecomponent();
//
// todo: 在 initializecomponent 调用后添加任何构造函数代码
//
}
///
/// 清理所有正在使用的资源。
///
protected override void dispose( bool disposing )
{
if( disposing )
{
if (components != null)
{
components.dispose();
}
}
base.dispose( disposing );
}
#region windows 窗体设计器生成的代码
///
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
/// 此方法的内容。
///
private void initializecomponent()
{
system.resources.resourcemanager resources = new system.resources.resourcemanager(typeof(form1));
this.label1 = new system.windows.forms.label();
this.button1 = new system.windows.forms.button();
this.suspendlayout();
//
// label1
//
this.label1.location = new system.drawing.point(72, 16);
this.label1.name = "label1";
this.label1.size = new system.drawing.size(144, 24);
this.label1.tabindex = 0;
this.label1.text = "点击开始进行光盘注册";
this.label1.textalign = system.drawing.contentalignment.middlecenter;
//
// button1
//
this.button1.location = new system.drawing.point(104, 56);
this.button1.name = "button1";
this.button1.size = new system.drawing.size(72, 24);
this.button1.tabindex = 1;
this.button1.text = "开始注册";
this.button1.click += new system.eventhandler(this.button1_click);
//
// form1
//
this.autoscalebasesize = new system.drawing.size(6, 14);
this.clientsize = new system.drawing.size(280, 101);
this.controls.add(this.button1);
this.controls.add(this.label1);
this.icon = ((system.drawing.icon)(resources.getobject("$this.icon")));
this.maximizebox = false;
this.name = "form1";
this.text = "光盘注册";
this.resumelayout(false);
}
#endregion
///
/// 应用程序的主入口点。
///
[stathread]
static void main()
{
application.run(new form1());
}
///
/// 读取光盘相关信息并进行注册。
///
public void readcdrom()
{
//创建获取光盘信息对象
managementclass driveclass = new managementclass("win32_cdromdrive");
//返回该类的所有实例的集合
managementobjectcollection drives = driveclass.getinstances();
//设置状态标志位初始化为false
bool status = false;
//查询所有的光驱
foreach (managementobject drv in drives)
{
try
{
//优先获取第一个有光盘的光驱中光盘的序列号
if(drv["volumeserialnumber"].tostring()!="")
{
cdromsn = drv["volumeserialnumber"].tostring();
status=true;
//查询结束
break;
}
}
catch
{
//出现异常
status=false;
continue;
}
}
if(status)
{
//开始注册
if(regcdromsn(cdromsn))
{
this.label1.text = "注册成功!";
this.button1.text = "关闭";
}
else
{
this.label1.text = "注册失败!";
this.button1.text = "关闭";
}
}
else
{
// initializes the variables to pass to the messagebox.show method.
string message = "请插入要注册的启动光盘!";
string caption = "光盘注册";
messageboxbuttons buttons = messageboxbuttons.okcancel;
dialogresult result;
// displays the messagebox.
result = messagebox.show(this, message, caption, buttons,
messageboxicon.warning, messageboxdefaultbutton.button1);
if(result==dialogresult.ok)
{
readcdrom();
}
else
{
application.exit();
}
}
driveclass.dispose();
}
///
/// 把信息写入注册表。
///
public bool regcdromsn(string sn)
{
try
{
// 在hkey_local_machine/software下建立一新键,起名为cddrivesn
registrykey key = registry.localmachine.opensubkey("software", true);
// 增加一个子键
registrykey newkey = key.createsubkey("cddrivesn");
// 设置此子键的值
newkey.setvalue("cddrivesn", sn);
// 成功返回true
return true;
}
catch
{
// 出现异常返回false
return false;
}
}
private void button1_click(object sender, system.eventargs e)
{
if(this.button1.text == "开始注册")
{
this.button1.text = "取消注册";
readcdrom();
}
else
{
application.exit();
}
}
}
}
新闻热点
疑难解答