一 :编程思想
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();
}
}
}
}
分享到:
相关推荐
在C#中实现光盘刻录,通常会涉及到调用系统API,这允许开发者直接与操作系统底层交互,以完成特定任务。下面我们将详细讨论如何在C#中使用系统API进行光盘刻录。 首先,我们需要了解C#中调用系统API的基本方法。在...
C# 为光盘添加AutoRun.ini自动运行功能 C#为光盘添加自动运行功能,将添加一个AutoRun.ini的文件在程序目录中,高手请跳过,这个是为C#入门者准备的简单实例,功能与开机启动有些差别。
第1章 认识C#及开发环境 1.1 C#概述 1.1.1 C#发展历程 1.1.2 C#语言编程环境 1.2.NETFramework2.0简介 1.2.1 什么是.NETFramework2.0 1.2.2.NETFramework2.0特性 1.3 安装集成开发环境VisualStudio2005 1.3.1 安装...
实例064 开机启动项管理 224 实例065 显示器控制 228 实例066 屏幕放大镜 231 实例067 身份证号码验证工具 233 第7章 文件及数据流应用 实例068 文件批量更名 241 实例069 分割与合成文件 244 实例...
传统的启动盘通常是软盘或光盘,随着技术的发展,现在更多使用USB闪存驱动器作为启动盘。它们在没有硬盘或硬盘出现问题时,可以用来启动电脑,并且可以加载操作系统进行安装或修复。制作启动盘的主要目的是为了在...
实例064 开机启动项管理 224 实例065 显示器控制 228 实例066 屏幕放大镜 231 实例067 身份证号码验证工具 233 第7章 文件及数据流应用 实例068 文件批量更名 241 实例069 分割与合成文件 244 实例...
《C#程序开发范例宝典》是一本深入探讨C#编程语言的实用书籍,其光盘内容通常包含了丰富的实例代码、项目模板以及可能的补充资料。这些资源旨在帮助开发者更好地理解和应用C#进行软件开发,提升编程技能。在本文中,...
实例064 开机启动项管理 224 实例065 显示器控制 228 实例066 屏幕放大镜 231 实例067 身份证号码验证工具 233 第7章 文件及数据流应用 实例068 文件批量更名 241 实例069 分割与合成文件 244 实例...
在C#编程中,检测光盘的弹入和弹出主要涉及到系统事件监听和设备管理。这个任务可以通过Windows API(应用程序接口)调用来实现,尤其是使用`WMI(Windows Management Instrumentation)`来监控系统硬件事件。下面...
实例064 开机启动项管理 224 实例065 显示器控制 228 实例066 屏幕放大镜 231 实例067 身份证号码验证工具 233 第7章 文件及数据流应用 实例068 文件批量更名 241 实例069 分割与合成文件 244 实例...
实例064 开机启动项管理 224 实例065 显示器控制 228 实例066 屏幕放大镜 231 实例067 身份证号码验证工具 233 第7章 文件及数据流应用 实例068 文件批量更名 241 实例069 分割与合成文件 244 实例...
标题中的“自动启动多媒体光盘程序”指的是在计算机中放入含有特定程序的多媒体光盘时,光盘能够自动运行其内置的应用程序,无需用户手动操作。这种功能在早期的计算机应用中常见,如安装盘、教学软件等。下面将详细...
第1章 认识C#及开发环境 1.1 C#概述 2 1.1.1 C#发展历程 2 1.1.2 C#语言编程环境 2 1.2 .NET Framework 2.0简介 2 1.2.1 什么是.NET Framework 2.0 2 1.2.2 .NET Framework 2.0特性 3 1.3 安装集成...
本文实例讲述了C#调用Nero SDK刻录光盘的方法。分享给大家供大家参考。具体如下: 项目中有多光驱刻录的需求,但在一个进程里同时启动多个刻录任务,进程经常报异常,于是把刻录部分单独做了个控制台程序,每个光驱...
c#宾馆管理系统实现—功能全 下面是在简体中文Microsoft Windows Server 2003(SP1)/Microsoft Office 2003(SP2)/ Microsoft SQL Server 2005/Microsoft Visual Studio 2005环境中配置《宾馆酒店管理系统》数据库及...
这个压缩包中的资料可能是对以上知识点的详细讲解,或者是提供了一段实际的C#代码示例,帮助开发者理解如何在实践中实现光盘刻录。对于想要学习或改进这方面技能的人来说,这是一个宝贵的资源。
在C#编程中,检测PC光驱是否插入了光盘通常涉及到对系统硬件状态的监控。这个过程可以通过Windows Management Instrumentation(WMI)来实现,这是一个强大的工具,允许开发者访问和管理系统的各种信息,包括硬件...
0009 设置Windows应用程序启动窗体 5 0010 设置Web应用程序起始页 5 0011 如何设置程序的出错窗口 5 0012 如何进行程序调试 6 0013 如何结束不能正常运行的程序 6 0014 如何锁定窗体中的控件 6 ...
1074 C#如何检测SQL是否启动 649 1075 如何启动IIS的默认SMTP服务器 650 1076 如何暂停IIS的默认SMTP服务器 650 1077 如何继续IIS的默认SMTP服务器 651 1078 如何停止IIS的默认SMTP服务器 651 24.2 网络...
至于"CDPaper.exe",这是程序的可执行文件,用户双击这个文件就能启动光盘纸袋打印程序。在运行之前,确保计算机已连接了合适的打印机,因为该程序的主要任务就是将设计好的光盘纸袋图案输出到纸上。同时,为了获得...