private void btnRegisterExtensionVhd_Click(object sender, EventArgs e) { var res = PipeClient.RegisterExtensionVhd(); if (res.IsError) { Medo.MessageBox.ShowError(this, res.Message); } this.DialogResult = DialogResult.OK; }
private void btnOK_Click(object sender, EventArgs e) { var driveLetter = string.IsNullOrEmpty(cmbDriveLetter.Text) ? "" : cmbDriveLetter.Text + "\\"; using (var frm = new ServiceWaitForm("Changing drive letter", delegate() { var res = PipeClient.ChangeDriveLetter(this.Volume.VolumeName, driveLetter); if (res.IsError) { throw new InvalidOperationException(res.Message); } })) { frm.ShowDialog(this); } }
private void buttonOk_Click(object sender, EventArgs e) { try { this.Cursor = Cursors.WaitCursor; var vhds = new List <string>(); foreach (ListViewVhdItem item in listAutoAttach.Items) { vhds.Add(item.GetSettingFileName()); } var resVhd = PipeClient.WriteContextMenuVhdSettings(checkVhdOpen.Checked, checkVhdAttach.Checked, checkVhdAttachReadOnly.Checked, checkVhdDetach.Checked, checkVhdDetachDrive.Checked); if (resVhd.IsError) { Medo.MessageBox.ShowError(this, resVhd.Message); } var isWindows8 = ((Environment.OSVersion.Version.Major * 1000000 + Environment.OSVersion.Version.Minor) >= 6000002); //show if equal to or higher than Windows 8 if (isWindows8) { var resIso = PipeClient.WriteContextMenuIsoSettings(checkIsoOpen.Checked, checkIsoAttachReadOnly.Checked, checkIsoDetach.Checked); if (resIso.IsError) { Medo.MessageBox.ShowError(this, resIso.Message); } } var resAA = PipeClient.WriteAutoAttachSettings(vhds.ToArray()); if (resAA.IsError) { Medo.MessageBox.ShowError(this, resAA.Message); } } catch (IOException ex) { Messages.ShowServiceIOException(this, ex); } finally { this.Cursor = Cursors.Default; } }
/// <summary> /// Change the drive letter of an attached VHD. /// <summary> public int ChangeDriveLetter(string[] args) { // Init and parameter checks if (args.Length != 2) { string err = "Changing drive letter failed. Wrong number of arguments.\n"; err += "Usage: VhdAttach -ChangeLetter VHDFilename Driveletter:"; showError(err); return(1); } string fileName = args[0]; if (!File.Exists(fileName)) { string err = "Changing drive letter failed. File not found: " + fileName + "\n"; err += "Usage: VhdAttach -ChangeLetter VHDFilename Driveletter:"; showError(err); return(1); } string driveLetterRaw = args[1]; if (driveLetterRaw.Length > 3 || (driveLetterRaw.Length == 3 && driveLetterRaw.Substring(1, 2) != ":\\") || (driveLetterRaw.Length == 2 && driveLetterRaw.Substring(1, 1) != ":")) { string err = "Changing drive letter failed. Drive Letter parameter seems to be invalid.\n"; err += "Usage: VhdAttach -ChangeLetter VHDFilename Driveletter:"; showError(err); return(1); } string allowedLetters = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"; string driveLetter1 = args[1].Substring(0, 1); string driveLetter2 = driveLetter1 + ":"; if (allowedLetters.IndexOf(driveLetter1) == -1) { string err = "Changing drive letter failed. Drive Letter parameter seems to be invalid.\n"; err += "Usage: VhdAttach -ChangeLetter VHDFilename Driveletter:"; showError(err); return(1); } // Test-Code, please ignore // PipeClient.Attach(fileName, false, false); // PipeClient.Detach(fileName); // The actual drive letter operation begins here string attachedDevice = null; try { using (var document = new Medo.IO.VirtualDisk(fileName)) { document.Open(Medo.IO.VirtualDiskAccessMask.GetInfo); attachedDevice = document.GetAttachedPath(); } } catch { string err = "Changing Drive letter failed. Could not open device.\n"; err += "Possible reasons include:\n"; err += "The specified file might not be attached or maybe isn't an VHD file."; showError(err); return(1); } if (attachedDevice != null) { var volumes = new List <Volume>(Volume.GetVolumesOnPhysicalDrive(attachedDevice)); var availableVolumes = new List <Volume>(); if (volumes != null && volumes.Count > 0) { string oldLetter2 = volumes[0].DriveLetter2; PipeResponse res = PipeClient.ChangeDriveLetter(volumes[0].VolumeName, driveLetter2); if (res.IsError == true) { PipeClient.ChangeDriveLetter(volumes[0].VolumeName, oldLetter2); string err = "Changing drive letter failed. Drive letter possibly in use."; showError(err); return(1); } } } return(0); }