using System;
using System.Collections;
using System.ComponentModel;
using System.Configuration.Install;

namespace DBSetupAction
{
	/// <summary>
	/// DBInstaller 的摘要说明。
	/// </summary>
	[RunInstaller(true)]
	public class DBInstaller : System.Configuration.Install.Installer
	{
		/// <summary>
		/// 必需的设计器变量。
		/// </summary>
		private System.ComponentModel.Container components = null;

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

			// TODO: 在 InitializeComponent 调用后添加任何初始化
		}
		public override void Install(IDictionary stateSaver)
		{
			base.Install (stateSaver);
			try{
				string dbserver=Context.Parameters["DBSERVER"];
				string uid=Context.Parameters["UID"];
				string pwd=Context.Parameters["PWD"];
				string cnstr=string.Format("server={0};database=master;uid={1};pwd={2};",dbserver,uid,pwd);
				string basepath=InstallerPath.GetCurrent()+@"\Data\";
				string[,] descfiles=new string[2,2];
				descfiles[0,0]="DBHISClinic_Data";
				descfiles[0,1]=basepath+"DBHISClinic_Data.mdf";
				descfiles[1,0]="DBHISClinic_Log";
				descfiles[1,1]=basepath+"DBHISClinic_Log.ldf";
				new DBInstallAssist(cnstr).RestoreDB(basepath+"HisClinic.bak","HISClinic",descfiles);
			}
			catch(Exception ex){
				throw new InstallException("安装数据库时产生错误！请检查你的用户名密码等设置！",ex);
			}
		}


		/// <summary> 
		/// 清理所有正在使用的资源。
		/// </summary>
		protected override void Dispose( bool disposing )
		{
			if( disposing )
			{
				if(components != null)
				{
					components.Dispose();
				}
			}
			base.Dispose( disposing );
		}


		#region 组件设计器生成的代码
		/// <summary>
		/// 设计器支持所需的方法 - 不要使用代码编辑器修改
		/// 此方法的内容。
		/// </summary>
		private void InitializeComponent()
		{
			components = new System.ComponentModel.Container();
		}
		#endregion
	}
}
