ServiceManagerInstaller.cs 3.1 KB
using System;
using System.Collections;
using System.ComponentModel;
using System.Configuration.Install;
using System.Diagnostics;
using System.IO;
using System.Management;
using System.Runtime.InteropServices;
using System.Windows.Forms;

namespace App
{
    [RunInstaller(true)]
    public partial class ServiceManagerInstaller : Installer
    {
		// 获取硬盘物理序列号
		[DllImport("DiskSerialNo.dll")]
		private static extern string GetDiskSerialNo();
		
		// 获取网卡序列号		
		[DllImport("DiskSerialNo.dll")]
		private static extern string GetMacAddr();

        public ServiceManagerInstaller()
		{
			// 该调用是设计器所必需的。
			InitializeComponent();
		}

		public override void Install(IDictionary mySavedState)
		{
            base.Install(mySavedState);	// 安装
            //try
            //{
            //    GetDiskSerial();
            //}
            //catch (Exception ex)
            //{
            //    //throw new Exception(ex.Message);
            //    MessageBox.Show(ex.Message.ToString());
            //}
		}
		#region GetDiskSerial

		private void GetDiskSerial()
		{
			try
			{	//安装后弹出校验码的提示文本,以便用户进行注册获取许可证文件//wuxiangrong 2005.10.26			
				String infos = @"请使用该校验码:" + GetDiskID() + @",到相应的网站上注册,获取许可证文件!"; 
				FileStream fs = new FileStream("ReadMe.txt", FileMode.OpenOrCreate);
				StreamWriter sw = new StreamWriter(fs);
				sw.Write(infos);
				sw.Close();
				Process.Start("ReadMe.txt");

				//MessageBox.Show("安装结束后请重新启动计算机","提示",MessageBoxButtons.OK,MessageBoxIcon.Information);
			}
			catch (Exception ex)
			{
				throw new Exception(ex.Message);
			}
		}

		// xfpan [5/17/2004]
		/// <summary>
		/// 获取机器唯一标志
		/// </summary>
		/// <returns>机器唯一标志</returns>
		private string GetDiskID()
		{
			string DiskID = "";

			DiskID = GetMAC().Trim();
            if (!String.IsNullOrEmpty(DiskID))
			{
				DiskID = "MA-" + DiskID;
				return DiskID;
			}

			try
			{
				DiskID = GetDiskSerialNo().Trim();
                if (!String.IsNullOrEmpty(DiskID))
				{
					DiskID = "HD" + DiskID;
					return DiskID;
				}
			}
			catch{}			

			DiskID = GetCPUId();
            if (!String.IsNullOrEmpty(DiskID))
            {
                DiskID = "CP" + DiskID;
                return DiskID;
            }

			return "";
		}	
				
		private string GetCPUId()
		{
			String HDid = "";
			ManagementClass cimobject = new ManagementClass("Win32_Processor");
			try
			{
				ManagementObjectCollection moc = cimobject.GetInstances();
				foreach(ManagementObject mo in moc)
				{
					HDid = mo["UniqueId"].ToString();
                    if (!String.IsNullOrEmpty(HDid))
                        break;
				}
			}
			catch
			{
				HDid = "";
			}
			return HDid.Trim();
		}

		private string GetMAC()
		{
			string strMac = "";
			try
			{
				strMac = GetMacAddr();
			}
			catch
			{
				strMac = "";
			}
			return strMac.Trim();
		}
		// xfpan [5/17/2004]
		#endregion
				
    }
}