以前も外付けSSDをマウントするためのC#コードを書きました。
touch-sp.hatenablog.com
以前のC#コードではUSBのさす場所を変えたりするとうまく動かないことがありました。
今回GUIを使ってUSB接続されたストレージを選択可能にしました。
表示されるリストからデバイスを選択するとマウントされます。
以前のコードがなぜうまく動作しない時があったかというと「PHYSICALDRIVE」の番号が流動的なことが理由です。
ユーザーに選択させることでその流動性は問題にならなくなります。
C#コード
あらかじめ、フォーム(Form1)にリストボックス(listBox1)を配置しています。using System; using System.Diagnostics; using System.Windows.Forms; namespace newMountDisk { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { var proc = new Process(); proc.StartInfo.FileName = Environment.GetEnvironmentVariable("ComSpec"); proc.StartInfo.CreateNoWindow = true; proc.StartInfo.UseShellExecute = false; proc.StartInfo.RedirectStandardOutput = true; proc.StartInfo.Arguments = @"/c wmic.exe diskdrive get deviceID,Caption"; proc.Start(); string txtResult = proc.StandardOutput.ReadToEnd(); proc.WaitForExit(); string[] _kugiri = { "\r\n" }; string[] arr = txtResult.Split(_kugiri, StringSplitOptions.RemoveEmptyEntries); for (int i = 1; i < arr.Length; i++) { listBox1.Items.Add(arr[i]); } } private void listBox1_KeyDown(object sender, KeyEventArgs e) { mount_disk(); Close(); } private void listBox1_MouseDoubleClick(object sender, MouseEventArgs e) { mount_disk(); Close(); } private void mount_disk() { string select_string = listBox1.SelectedItem.ToString().Trim(); string[] select_array = select_string.Split(' '); string result = select_array[select_array.Length - 1]; var proc = new Process(); proc.StartInfo.FileName = @"c:\Windows\System32/cmd.exe"; proc.StartInfo.Verb = "RunAs"; proc.StartInfo.UseShellExecute = true; proc.StartInfo.Arguments = $"/C wsl --mount {result} --partition 1"; proc.Start(); } } }