/// <summary> /// Remove an existing VdiskRestorePoint from the collection /// </summary> /// <pdGenerated>Default Remove</pdGenerated> public void RemoveVdiskRestorePoint(VdiskRestorePoint oldVdiskRestorePoint) { if (oldVdiskRestorePoint == null) { return; } if (this.vdiskRestorePoint != null) { if (this.vdiskRestorePoint.Contains(oldVdiskRestorePoint)) { this.vdiskRestorePoint.Remove(oldVdiskRestorePoint); oldVdiskRestorePoint.VdiskTemplet = null; } } }
/// <summary> /// Add a new VdiskRestorePoint in the collection /// </summary> /// <pdGenerated>Default Add</pdGenerated> public void AddVdiskRestorePoint(VdiskRestorePoint newVdiskRestorePoint) { if (newVdiskRestorePoint == null) { return; } if (this.vdiskRestorePoint == null) { this.vdiskRestorePoint = new System.Collections.Generic.List <VdiskRestorePoint>(); } if (!this.vdiskRestorePoint.Contains(newVdiskRestorePoint)) { this.vdiskRestorePoint.Add(newVdiskRestorePoint); newVdiskRestorePoint.VdiskTemplet = this; } }
private void 还原button_Click(object sender, EventArgs e) { DataRowView drv = (DataRowView)磁盘comboBox.SelectedItem; string diskName = Convert.ToString(drv.Row["Text"]); if (diskName == "请选择") { return; } if (vDiskParent.vdiskRestorePoint == null || vDiskParent.vdiskRestorePoint.Count == 0) { MessageBox.Show("磁盘没有还原点!"); return; } MessageBoxButtons messButton = MessageBoxButtons.OKCancel; DialogResult dr = MessageBox.Show("确定要退回到最近的还原点吗?", "还原", messButton); if (dr == DialogResult.OK) { using (SQLiteConnection conn = new SQLiteConnection("data source=nodisk.db")) { using (SQLiteCommand cmd = new SQLiteCommand()) { cmd.Connection = conn; conn.Open(); SQLiteHelper sh = new SQLiteHelper(cmd); VdiskRestorePoint tempPoint = new VdiskRestorePoint(); float tempPointSort = 0; foreach (VdiskRestorePoint p in vDiskParent.vdiskRestorePoint) { if (p.VdiskRestorePointSort > tempPointSort) { tempPointSort = p.VdiskRestorePointSort; } } foreach (VdiskRestorePoint p in vDiskParent.vdiskRestorePoint) { if (p.VdiskRestorePointSort == tempPointSort) { tempPoint = p; } } string vdisk_restore_point_id = tempPoint.VdiskRestorePointId; string vdisk_resotre_point_name = tempPoint.VdiskResotrePointName; string vdisk_restore_point_path = tempPoint.VdiskRestorePointPath; string deleteSql = "DELETE from VDISK_RESTORE_POINT WHERE vdisk_restore_point_id = '" + vdisk_restore_point_id + "'"; vDiskParent.vdiskRestorePoint.Remove(tempPoint); 还原点dataGridView.AutoGenerateColumns = false; 还原点dataGridView.DataSource = vDiskParent.vdiskRestorePoint.ToArray(); sh.ExecuteScalar(deleteSql); conn.Close(); DiskManagementData ParamObj = new DiskManagementData(); // TODO: 初始化为适当的值 ParamObj.DevicePath = tempPoint.VdiskRestorePointPath; ParamObj.TargetName = tempPoint.VdiskResotrePointName; ParamObj.serverURL = iscsiURL; ParamObj.Username = username; ParamObj.Password = password; bool actual; actual = DiskManager.RemoveDisk(ParamObj); if (actual == true) { MessageBox.Show("磁盘删除成功!"); } } } } }
private void VdiskRestorePointManageWindow_Load(object sender, EventArgs e) { IniFile ini = new IniFile(Environment.CurrentDirectory + "\\setting.ini"); iscsiURL = ini.ReadString("IscsiServer", "URL", ""); username = ini.ReadString("IscsiServer", "USERNAME", ""); password = ini.ReadString("IscsiServer", "PASSWORD", ""); using (SQLiteConnection conn = new SQLiteConnection("data source=nodisk.db")) { using (SQLiteCommand cmd = new SQLiteCommand()) { cmd.Connection = conn; conn.Open(); SQLiteHelper sh = new SQLiteHelper(cmd); DataTable dt = sh.Select("select * from VDISK_TEMPLET;"); VdiskTemplate vdiskTemp; DataTable dts = new DataTable(); dts.Columns.Add("Text", Type.GetType("System.String")); dts.Columns.Add("Value", Type.GetType("System.String")); dts.Rows.Add("请选择", "0"); int i = 0; foreach (DataRow row in dt.Rows) { vdiskTemp = new VdiskTemplate(); vdiskTemp.DiskId = row["disk_id"].ToString(); vdiskTemp.DiskName = row["disk_name"].ToString(); vdiskTemp.DiskSize = (int)row["disk_size"]; vdiskTemp.DiskPath = row["disk_path"].ToString(); vdiskTemp.DiskType = (int)row["disk_type"]; dts.Rows.Add(vdiskTemp.DiskName, i++); DataTable rs = sh.Select("select * from VDISK_RESTORE_POINT where disk_id = '" + vdiskTemp.DiskId + "';"); foreach (DataRow rows in rs.Rows) { VdiskRestorePoint point = new VdiskRestorePoint(); point.VdiskRestorePointId = rows["vdisk_restore_point_id"].ToString(); point.VdiskRestorePointCreateTime = rows["vdisk_restore_point_create_time"].ToString(); point.VdiskResotrePointName = rows["vdisk_resotre_point_name"].ToString(); point.VdiskRestorePointDescription = rows["vdisk_restore_point_description"].ToString(); point.VdiskRestorePointPath = rows["vdisk_restore_point_path"].ToString(); point.VdiskRestorePointSort = float.Parse(rows["vdisk_restore_point_sort"].ToString()); point.VdiskTemplet = vdiskTemp; vdiskTemp.AddVdiskRestorePoint(point); } vdiskTempletList.Add(vdiskTemp); } conn.Close(); 磁盘comboBox.DataSource = dts; 磁盘comboBox.DisplayMember = "Text"; // Text,即显式的文本 磁盘comboBox.ValueMember = "Value"; // Value,即实际的值 磁盘comboBox.SelectedIndex = 0; } } }
private void 新增button_Click(object sender, EventArgs e) { DataRowView drv = (DataRowView)磁盘comboBox.SelectedItem; string diskName = Convert.ToString(drv.Row["Text"]); if (diskName == "请选择") { return; } MessageBoxButtons messButton = MessageBoxButtons.OKCancel; DialogResult dr = MessageBox.Show("确定要创建还原点吗?", "创建还原点", messButton); if (dr == DialogResult.OK) { DateTime dt = DateTime.Now; string time = string.Format("{0:yyyyMMddHHmmssffff}", dt); DiskManagementData ParamObj = new DiskManagementData(); ParamObj.VhdxType = 4; if (vDiskParent.vdiskRestorePoint == null || vDiskParent.vdiskRestorePoint.Count == 0) { ParamObj.DevicePath = vDiskParent.DiskPath + vDiskParent.DiskName + "-" + time + ".vhdx"; ParamObj.TargetName = vDiskParent.DiskName + "-" + time; ParamObj.DiskSize = ushort.Parse(vDiskParent.DiskSize.ToString()); ParamObj.TargetIQN = "HstecsTemplet." + vDiskParent.DiskName + "-" + time; ParamObj.ParentPath = vDiskParent.DiskPath + vDiskParent.DiskName + ".vhdx"; ParamObj.serverURL = iscsiURL; ParamObj.Username = username; ParamObj.Password = password; var dic = new Dictionary <string, object>(); dic["vdisk_restore_point_id"] = System.Guid.NewGuid().ToString("N"); dic["disk_id"] = vDiskParent.DiskId; dic["vdisk_restore_point_create_time"] = time; dic["vdisk_resotre_point_name"] = vDiskParent.DiskName + "-" + time; dic["vdisk_restore_point_description"] = time; dic["vdisk_restore_point_path"] = vDiskParent.DiskPath + vDiskParent.DiskName + "-" + time + ".vhdx"; dic["vdisk_restore_point_sort"] = time; bool actual; actual = DiskManager.CreateVhdxDisk(ParamObj); if (actual == true) { using (SQLiteConnection conn = new SQLiteConnection("data source=nodisk.db")) { using (SQLiteCommand cmd = new SQLiteCommand()) { cmd.Connection = conn; conn.Open(); SQLiteHelper sh = new SQLiteHelper(cmd); sh.Insert("VDISK_RESTORE_POINT", dic); VdiskRestorePoint tempPoint = new VdiskRestorePoint(); tempPoint.VdiskResotrePointName = dic["vdisk_resotre_point_name"].ToString(); tempPoint.VdiskRestorePointCreateTime = dic["vdisk_restore_point_create_time"].ToString(); tempPoint.VdiskRestorePointDescription = dic["vdisk_restore_point_create_time"].ToString(); tempPoint.VdiskRestorePointPath = dic["vdisk_restore_point_path"].ToString(); tempPoint.VdiskRestorePointId = dic["vdisk_restore_point_id"].ToString(); vDiskParent.AddVdiskRestorePoint(tempPoint); 还原点dataGridView.AutoGenerateColumns = false; 还原点dataGridView.DataSource = vDiskParent.vdiskRestorePoint.ToArray(); conn.Close(); } } MessageBox.Show("磁盘添加成功!"); } else { MessageBox.Show("磁盘添加失败!"); } } else { VdiskRestorePoint tempPoint = new VdiskRestorePoint(); float tempPointSort = 0; foreach (VdiskRestorePoint p in vDiskParent.vdiskRestorePoint) { if (p.VdiskRestorePointSort > tempPointSort) { tempPointSort = p.VdiskRestorePointSort; } } foreach (VdiskRestorePoint p in vDiskParent.vdiskRestorePoint) { if (p.VdiskRestorePointSort == tempPointSort) { tempPoint = p; } } ParamObj.DevicePath = vDiskParent.DiskPath + vDiskParent.DiskName + "-" + time + ".vhdx"; ParamObj.TargetName = vDiskParent.DiskName + "-" + time; ParamObj.DiskSize = ushort.Parse(vDiskParent.DiskSize.ToString()); ParamObj.TargetIQN = "HstecsTemplet." + vDiskParent.DiskName + "-" + time; //ParamObj.ParentPath = vDiskParent.DiskPath + vDiskParent.DiskName + ".vhdx"; ParamObj.ParentPath = tempPoint.VdiskRestorePointPath; ParamObj.serverURL = iscsiURL; ParamObj.Username = username; ParamObj.Password = password; var dic = new Dictionary <string, object>(); dic["vdisk_restore_point_id"] = System.Guid.NewGuid().ToString("N"); dic["disk_id"] = vDiskParent.DiskId; dic["vdisk_restore_point_create_time"] = time; dic["vdisk_resotre_point_name"] = vDiskParent.DiskName + "-" + time; dic["vdisk_restore_point_description"] = time; dic["vdisk_restore_point_path"] = vDiskParent.DiskPath + vDiskParent.DiskName + "-" + time + ".vhdx"; dic["vdisk_restore_point_sort"] = time; bool actual; actual = DiskManager.CreateVhdxDisk(ParamObj); if (actual == true) { using (SQLiteConnection conn = new SQLiteConnection("data source=nodisk.db")) { using (SQLiteCommand cmd = new SQLiteCommand()) { cmd.Connection = conn; conn.Open(); SQLiteHelper sh = new SQLiteHelper(cmd); sh.Insert("VDISK_RESTORE_POINT", dic); VdiskRestorePoint tempPoints = new VdiskRestorePoint(); tempPoints.VdiskResotrePointName = dic["vdisk_resotre_point_name"].ToString(); tempPoints.VdiskRestorePointCreateTime = dic["vdisk_restore_point_create_time"].ToString(); tempPoints.VdiskRestorePointDescription = dic["vdisk_restore_point_create_time"].ToString(); tempPoints.VdiskRestorePointSort = float.Parse(dic["vdisk_restore_point_sort"].ToString()); tempPoints.VdiskRestorePointPath = dic["vdisk_restore_point_path"].ToString(); tempPoints.VdiskRestorePointId = dic["vdisk_restore_point_id"].ToString(); vDiskParent.AddVdiskRestorePoint(tempPoints); 还原点dataGridView.AutoGenerateColumns = false; 还原点dataGridView.DataSource = vDiskParent.vdiskRestorePoint.ToArray(); conn.Close(); } } MessageBox.Show("还原点创建成功!"); } else { MessageBox.Show("还原点创建失败!"); } } } }
public void start() { string server_ip = ""; string client_disk_path = ""; bool ipIsAvalible = false; string tempIp = ""; using (SQLiteConnection conn = new SQLiteConnection("data source=nodisk.db")) { using (SQLiteCommand cmd = new SQLiteCommand()) { cmd.Connection = conn; conn.Open(); SQLiteHelper sh = new SQLiteHelper(cmd); DataTable dt = sh.Select("select * from SYSTEM_SETTING;"); foreach (DataRow row in dt.Rows) { server_ip = row["server_ip"].ToString(); client_disk_path = row["client_disk_path"].ToString(); } conn.Close(); string HostName = Dns.GetHostName(); IPHostEntry IpEntry = Dns.GetHostEntry(HostName); for (int i = 0; i < IpEntry.AddressList.Length; i++) { //从IP地址列表中筛选出IPv4类型的IP地址 //AddressFamily.InterNetwork表示此IP为IPv4, //AddressFamily.InterNetworkV6表示此地址为IPv6类型 if (IpEntry.AddressList[i].AddressFamily == AddressFamily.InterNetwork) { if (IpEntry.AddressList[i].ToString() == server_ip) { ipIsAvalible = true; } else { tempIp = IpEntry.AddressList[i].ToString(); } } } } } using (var server = new HttpServer()) { server.RequestReceived += (s, e) => { using (var writer = new StreamWriter(e.Response.OutputStream)) { //char[] TrimChar = {':'}; string mac = e.Request.Params.Get(0); mac = mac.Replace(":", "").ToUpper(); using (SQLiteConnection conn = new SQLiteConnection("data source=nodisk.db")) { using (SQLiteCommand cmd = new SQLiteCommand()) { cmd.Connection = conn; conn.Open(); SQLiteHelper sh = new SQLiteHelper(cmd); DataTable dt = sh.Select("select * from CLIENT where client_mac = '" + mac + "';"); if (dt.Rows.Count == 0) { string client_id = System.Guid.NewGuid().ToString("N"); string client_name = "HSTECS-" + mac; string client_mac = mac; string client_work_path = client_disk_path; string client_description = mac; string client_group_id = "未分组"; string client_enable = "0"; //1、磁盘第一次登录自动登记并设置为未启用 string addClientString = "insert into CLIENT (client_id,client_name,client_mac,client_work_path,client_description,client_group_id,client_enable,client_super_enable) values ('" + client_id + "','" + client_name + "','" + client_mac + "','" + client_work_path + "','" + client_description + "','" + client_group_id + "','" + client_enable + "','0');"; sh.ExecuteScalar(addClientString); writer.Write("#!ipxe"); writer.Write(System.Environment.NewLine); writer.Write("echo Computer HSTECS-" + mac + " add success!"); } else { //2、已注册工作站登录 foreach (DataRow row in dt.Rows) { string checkSuperString = "select count(*) from CLIENT where client_super_enable;"; int isSuperEnable = int.Parse(sh.ExecuteScalar(checkSuperString).ToString()); if (isSuperEnable > 0 && row["client_super_enable"].ToString() != "1") { writer.Write("#!ipxe"); writer.Write(System.Environment.NewLine); writer.Write("echo Super Computer have been enable!Please disable super computer in system or power on the right computer!"); return; } if (row["client_enable"].ToString() == "0") { writer.Write("#!ipxe"); writer.Write(System.Environment.NewLine); writer.Write("echo Computer HSTECS-" + mac + " have been disable!"); } else { if (row["client_super_enable"].ToString() == "1") { //超级工作站模式 writer.Write("#!ipxe"); writer.Write(System.Environment.NewLine); writer.Write("set menu-timeout 5000"); writer.Write(System.Environment.NewLine); writer.Write("set submenu-timeout ${menu-timeout}"); //系统启动菜单 string getDiskList = "select * from CLIENT_DISK_LIST where client_disk_list_id = '" + row["client_disk_list_id"] + "';"; DataTable dtDiskList = sh.Select(getDiskList); Dictionary <String, String> tempDiskNameList = new Dictionary <String, String>(); foreach (DataRow rowDiskList in dtDiskList.Rows) { string disk_id = rowDiskList["disk_id"].ToString(); string getDiskName = "select * from VDISK_TEMPLET where disk_id = '" + disk_id + "';"; DataTable dtDisk = sh.Select(getDiskName); if (dtDisk.Rows.Count > 0) { writer.Write(System.Environment.NewLine); writer.Write("set menu-default " + dtDisk.Rows[0]["disk_name"].ToString()); } } //writer.Write(System.Environment.NewLine); //writer.Write("isset ${menu-default} || set menu-default exit"); writer.Write(System.Environment.NewLine); writer.Write("###################### MAIN MENU ####################################"); writer.Write(System.Environment.NewLine); writer.Write(":start"); writer.Write(System.Environment.NewLine); writer.Write("menu Hstecs PXE boot menu "); writer.Write(System.Environment.NewLine); writer.Write("item --gap -- ------------------------- Operating systems ------------------------------"); //系统启动菜单 getDiskList = "select * from CLIENT_DISK_LIST where client_disk_list_id = '" + row["client_disk_list_id"] + "';"; dtDiskList = sh.Select(getDiskList); tempDiskNameList = new Dictionary <String, String>(); foreach (DataRow rowDiskList in dtDiskList.Rows) { string disk_id = rowDiskList["disk_id"].ToString(); string getDiskName = "select * from VDISK_TEMPLET where disk_id = '" + disk_id + "';"; DataTable dtDisk = sh.Select(getDiskName); foreach (DataRow rowDisk in dtDisk.Rows) { List <VdiskRestorePoint> tempResotorePointList = new List <VdiskRestorePoint>(); DataTable rsDiskRestorePoint = sh.Select("select * from VDISK_RESTORE_POINT where disk_id = '" + disk_id + "';"); foreach (DataRow rows in rsDiskRestorePoint.Rows) { VdiskRestorePoint tempPoint = new VdiskRestorePoint(); tempPoint.VdiskResotrePointName = rows["vdisk_resotre_point_name"].ToString(); tempPoint.VdiskRestorePointSort = float.Parse(rows["vdisk_restore_point_sort"].ToString()); tempResotorePointList.Add(tempPoint); } //查询最新的还原点 VdiskRestorePoint tempPoints = new VdiskRestorePoint(); float tempPointSort = 0; foreach (VdiskRestorePoint p in tempResotorePointList) { if (p.VdiskRestorePointSort > tempPointSort) { tempPointSort = p.VdiskRestorePointSort; } } foreach (VdiskRestorePoint p in tempResotorePointList) { if (p.VdiskRestorePointSort == tempPointSort) { tempPoints = p; } } string vdisk_restore_point_id = tempPoints.VdiskRestorePointId; string vdisk_resotre_point_name = tempPoints.VdiskResotrePointName; // string disk_name = rowDisk["disk_name"].ToString(); tempDiskNameList.Add(disk_name, vdisk_resotre_point_name); writer.Write(System.Environment.NewLine); writer.Write("item " + disk_name + " Boot " + disk_name + " super disk from iSCSI"); } } writer.Write(System.Environment.NewLine); writer.Write("item --gap -- ------------------------- Advanced options -------------------------------"); writer.Write(System.Environment.NewLine); writer.Write("item shell Drop to iPXE shell"); writer.Write(System.Environment.NewLine); writer.Write("item reboot Reboot computer"); writer.Write(System.Environment.NewLine); writer.Write("item"); writer.Write(System.Environment.NewLine); writer.Write("item --key x exit Exit iPXE and continue BIOS boot"); writer.Write(System.Environment.NewLine); writer.Write("choose --timeout ${menu-timeout} --default ${menu-default} selected || goto cancel"); writer.Write(System.Environment.NewLine); writer.Write("set menu-timeout 0"); writer.Write(System.Environment.NewLine); writer.Write("goto ${selected}"); writer.Write(System.Environment.NewLine); writer.Write(":cancel"); writer.Write(System.Environment.NewLine); writer.Write("echo You cancelled the menu, dropping you to a shell"); writer.Write(System.Environment.NewLine); writer.Write(":shell"); writer.Write(System.Environment.NewLine); writer.Write("echo Type 'exit' to get the back to the menu"); writer.Write(System.Environment.NewLine); writer.Write("shell"); writer.Write(System.Environment.NewLine); writer.Write("set menu-timeout 0"); writer.Write(System.Environment.NewLine); writer.Write("set submenu-timeout 0"); writer.Write(System.Environment.NewLine); writer.Write("goto start"); writer.Write(System.Environment.NewLine); writer.Write(":failed"); writer.Write(System.Environment.NewLine); writer.Write("echo Booting failed, dropping to shell"); writer.Write(System.Environment.NewLine); writer.Write("goto shell"); writer.Write(System.Environment.NewLine); writer.Write(":reboot"); writer.Write(System.Environment.NewLine); writer.Write("reboot"); writer.Write(System.Environment.NewLine); writer.Write(":exit"); writer.Write(System.Environment.NewLine); writer.Write("exit"); writer.Write(System.Environment.NewLine); writer.Write(":back"); writer.Write(System.Environment.NewLine); writer.Write("set submenu-timeout 0"); writer.Write(System.Environment.NewLine); writer.Write("clear submenu-default"); writer.Write(System.Environment.NewLine); writer.Write("goto start"); Dictionary <string, string> .ValueCollection valueCol = tempDiskNameList.Values; foreach (KeyValuePair <string, string> kvp in tempDiskNameList) { if (kvp.Value != null) { string tempMac = mac.ToLower(); writer.Write(System.Environment.NewLine); writer.Write(":" + kvp.Value); writer.Write(System.Environment.NewLine); writer.Write("echo Booting " + kvp.Value + " from iSCSI"); writer.Write(System.Environment.NewLine); if (ipIsAvalible == true) { writer.Write("sanboot iscsi:" + server_ip + "::::hstecsclient." + kvp.Value + " || goto failed"); } else { writer.Write("sanboot iscsi:" + tempIp + "::::hstecsclient." + kvp.Value + " || goto failed"); } writer.Write(System.Environment.NewLine); writer.Write("goto start"); } else { string tempMac = mac.ToLower(); writer.Write(System.Environment.NewLine); writer.Write(":" + kvp.Key); writer.Write(System.Environment.NewLine); writer.Write("echo Booting " + kvp.Key + " from iSCSI"); writer.Write(System.Environment.NewLine); if (ipIsAvalible == true) { writer.Write("sanboot iscsi:" + server_ip + "::::hstecsclient." + kvp.Key + " || goto failed"); } else { writer.Write("sanboot iscsi:" + tempIp + "::::hstecsclient." + kvp.Key + " || goto failed"); } writer.Write(System.Environment.NewLine); writer.Write("goto start"); } } foreach (string name in valueCol) { } } else { //普通工作站,创建普通工作站启动脚本 writer.Write("#!ipxe"); writer.Write(System.Environment.NewLine); writer.Write("set menu-timeout 5000"); writer.Write(System.Environment.NewLine); writer.Write("set submenu-timeout ${menu-timeout}"); //系统启动菜单 string getDiskList = "select * from CLIENT_DISK_LIST where client_disk_list_id = '" + row["client_disk_list_id"] + "';"; DataTable dtDiskList = sh.Select(getDiskList); List <String> tempDiskNameList = new List <String>(); foreach (DataRow rowDiskList in dtDiskList.Rows) { string disk_id = rowDiskList["disk_id"].ToString(); string getDiskName = "select * from VDISK_TEMPLET where disk_id = '" + disk_id + "';"; DataTable dtDisk = sh.Select(getDiskName); if (dtDisk.Rows.Count > 0) { writer.Write(System.Environment.NewLine); writer.Write("set menu-default " + dtDisk.Rows[0]["disk_name"].ToString()); } } //writer.Write(System.Environment.NewLine); //writer.Write("isset ${menu-default} || set menu-default exit"); writer.Write(System.Environment.NewLine); writer.Write("###################### MAIN MENU ####################################"); writer.Write(System.Environment.NewLine); writer.Write(":start"); writer.Write(System.Environment.NewLine); writer.Write("menu Hstecs PXE boot menu "); writer.Write(System.Environment.NewLine); writer.Write("item --gap -- ------------------------- Operating systems ------------------------------"); //系统启动菜单 getDiskList = "select * from CLIENT_DISK_LIST where client_disk_list_id = '" + row["client_disk_list_id"] + "';"; dtDiskList = sh.Select(getDiskList); tempDiskNameList = new List <String>(); foreach (DataRow rowDiskList in dtDiskList.Rows) { string disk_id = rowDiskList["disk_id"].ToString(); string getDiskName = "select * from VDISK_TEMPLET where disk_id = '" + disk_id + "';"; DataTable dtDisk = sh.Select(getDiskName); foreach (DataRow rowDisk in dtDisk.Rows) { string disk_name = rowDisk["disk_name"].ToString(); tempDiskNameList.Add(disk_name); writer.Write(System.Environment.NewLine); writer.Write("item " + disk_name + " Boot " + disk_name + " from iSCSI"); } } writer.Write(System.Environment.NewLine); writer.Write("item --gap -- ------------------------- Advanced options -------------------------------"); writer.Write(System.Environment.NewLine); writer.Write("item shell Drop to iPXE shell"); writer.Write(System.Environment.NewLine); writer.Write("item reboot Reboot computer"); writer.Write(System.Environment.NewLine); writer.Write("item"); writer.Write(System.Environment.NewLine); writer.Write("item --key x exit Exit iPXE and continue BIOS boot"); writer.Write(System.Environment.NewLine); writer.Write("choose --timeout ${menu-timeout} --default ${menu-default} selected || goto cancel"); writer.Write(System.Environment.NewLine); writer.Write("set menu-timeout 0"); writer.Write(System.Environment.NewLine); writer.Write("goto ${selected}"); writer.Write(System.Environment.NewLine); writer.Write(":cancel"); writer.Write(System.Environment.NewLine); writer.Write("echo You cancelled the menu, dropping you to a shell"); writer.Write(System.Environment.NewLine); writer.Write(":shell"); writer.Write(System.Environment.NewLine); writer.Write("echo Type 'exit' to get the back to the menu"); writer.Write(System.Environment.NewLine); writer.Write("shell"); writer.Write(System.Environment.NewLine); writer.Write("set menu-timeout 0"); writer.Write(System.Environment.NewLine); writer.Write("set submenu-timeout 0"); writer.Write(System.Environment.NewLine); writer.Write("goto start"); writer.Write(System.Environment.NewLine); writer.Write(":failed"); writer.Write(System.Environment.NewLine); writer.Write("echo Booting failed, dropping to shell"); writer.Write(System.Environment.NewLine); writer.Write("goto shell"); writer.Write(System.Environment.NewLine); writer.Write(":reboot"); writer.Write(System.Environment.NewLine); writer.Write("reboot"); writer.Write(System.Environment.NewLine); writer.Write(":exit"); writer.Write(System.Environment.NewLine); writer.Write("exit"); writer.Write(System.Environment.NewLine); writer.Write(":back"); writer.Write(System.Environment.NewLine); writer.Write("set submenu-timeout 0"); writer.Write(System.Environment.NewLine); writer.Write("clear submenu-default"); writer.Write(System.Environment.NewLine); writer.Write("goto start"); foreach (string name in tempDiskNameList) { string tempMac = mac.ToLower(); writer.Write(System.Environment.NewLine); writer.Write(":" + name); writer.Write(System.Environment.NewLine); writer.Write("echo Booting " + name + " from iSCSI"); writer.Write(System.Environment.NewLine); if (ipIsAvalible == true) { writer.Write("sanboot iscsi:" + server_ip + "::::hstecsclient." + name + "-" + tempMac + " || goto failed"); } else { writer.Write("sanboot iscsi:" + tempIp + "::::hstecsclient." + name + "-" + tempMac + " || goto failed"); } writer.Write(System.Environment.NewLine); writer.Write("goto start"); } } } } /** * //3、如果工作站中有机器被设置为超级工作站,则将超级工作站磁盘连接到对应的工作站上进行软件安装 * * writer.Write("#!ipxe"); * writer.Write(System.Environment.NewLine); * writer.Write(":loop"); * writer.Write(System.Environment.NewLine); * writer.Write("echo Hello World"); * writer.Write(System.Environment.NewLine); * writer.Write("goto loop"); * */ } conn.Close(); } } } }; if (ipIsAvalible == true) { server.EndPoint = new IPEndPoint(IPAddress.Parse(server_ip), 80); } else { server.EndPoint = new IPEndPoint(IPAddress.Parse(tempIp), 80); } server.Start(); //Process.Start(String.Format("http://{0}/", server.EndPoint)); while (true) { Thread.Sleep(10000); } } }