【C#】WSL2に外付けSSDをマウントするためのGUIを作りました

以前も外付け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();

        }
    }
}




このエントリーをはてなブックマークに追加