private void Feature_CreateDistroShortcut(object sender, EventArgs e) { var targetItem = GetSelectedDistroBySender(sender); if (targetItem == null) { return; } using var saveFileDialog = new SaveFileDialog() { Title = $"Create Shortcut for {targetItem.DistroName}", SupportMultiDottedExtensions = true, Filter = "Shortcut Link|*.lnk", DefaultExt = ".lnk", FileName = $"{targetItem.DistroName}.lnk", }; if (saveFileDialog.ShowDialog(this) != DialogResult.OK) { return; } var targetShortcutPath = saveFileDialog.FileName; if (File.Exists(targetShortcutPath)) { File.Delete(targetShortcutPath); } WslHelpers.CreateDistroShotcut( targetItem.DistroName, targetShortcutPath, GetDistroIconImage(targetItem.DistroName)); }
public static void RefreshDistroList() { var table = dbContext.WslDistros; var distroList = WslHelpers.GetDistroList(); foreach (var eachDistroInfo in distroList) { var distro = table.Where(x => x.DistroName == eachDistroInfo.DistroName).FirstOrDefault(); if (distro != null) { distro.DistroStatus = eachDistroInfo.DistroStatus; distro.WSLVersion = eachDistroInfo.WSLVersion; distro.IsDefault = eachDistroInfo.IsDefault; } else { distro = new WslDistro() { DistroName = eachDistroInfo.DistroName, DistroStatus = eachDistroInfo.DistroStatus, WSLVersion = eachDistroInfo.WSLVersion, IsDefault = eachDistroInfo.IsDefault, }; table.Add(distro); } } var distroNames = distroList.Select(x => x.DistroName); var unregisteredDistroList = table.Where(x => !distroNames.Contains(x.DistroName)); table.RemoveRange(unregisteredDistroList); dbContext.SaveChanges(); }
private void Feature_BackupDistro(object sender, EventArgs e) { var targetItem = GetSelectedDistroBySender(sender); if (targetItem == null) { return; } using var saveFileDialog = new SaveFileDialog() { Title = $"Backup {targetItem.DistroName}", SupportMultiDottedExtensions = true, Filter = "Tape Archive File|*.tar", DefaultExt = ".tar", FileName = $"backup-{targetItem.DistroName.ToLowerInvariant()}-{DateTime.Now:yyyy-MM-dd-HH-mm-ss}.tar", }; if (saveFileDialog.ShowDialog(this) != DialogResult.OK) { return; } var backupProcess = WslHelpers.CreateExportDistroProcess(targetItem.DistroName, saveFileDialog.FileName); backupProcess.Start(); AppContext.RefreshDistroList(); }
private void Feature_RunAsDistro(object sender, EventArgs e) { var targetItem = GetSelectedDistroBySender(sender); if (targetItem == null) { return; } using var dialog = new RunAsForm(new DistroRunAsRequest() { DistroName = targetItem.DistroName, DistroList = AppContext.WslDistroList.Select(x => x.DistroName).Distinct().ToArray(), User = "******", ExecCommandLine = "", }); if (dialog.ShowDialog() != DialogResult.OK) { return; } var targetDistro = dialog.ViewModel.DistroName; var targetUserId = dialog.ViewModel.User; var execCommandLine = dialog.ViewModel.ExecCommandLine; var process = WslHelpers.CreateLaunchSpecificDistroAsUserProcess( targetDistro, targetUserId, execCommandLine); process.Start(); process.WaitForExit(); AppContext.RefreshDistroList(); }
private void PropertiesCalculator_DoWork(object sender, DoWorkEventArgs e) { var model = e.Argument as DistroPropertyRequest; if (model == null) { throw new ArgumentException("Cannot obtain internal model reference."); } var distroName = model.DistroName; if (string.IsNullOrWhiteSpace(distroName)) { return; } var distroGuid = WslHelpers.GetDistroGuid(distroName); if (!distroGuid.HasValue) { return; } var distroLocation = WslHelpers.GetDistroLocation(distroGuid.Value); Invoke(new Action(() => model.Location = distroLocation)); var totalSize = 0L; Invoke(new Action(() => model.DistroSize = totalSize)); if (distroLocation != null) { var directoryInfo = new DirectoryInfo(distroLocation); foreach (var eachFileInfo in directoryInfo.GetFiles("*.*", SearchOption.AllDirectories)) { totalSize += eachFileInfo.Length; Invoke(new Action(() => model.DistroSize = (long)(totalSize / 1024L))); } Invoke(new Action(() => model.DistroSize = totalSize)); } var table = ToDataTable(WslHelpers.GetLinuxUserInfo(distroName)); Invoke(new Action(() => { userListBindingSource.DataSource = table; })); }
private void Feature_OpenDistroFileSystem(object sender, EventArgs e) { var targetItem = GetSelectedDistroBySender(sender); if (targetItem == null) { return; } var process = WslHelpers.CreateLaunchSpecificDistroExplorerProcess(targetItem.DistroName); process.Start(); AppContext.RefreshDistroList(); }
private void Feature_ShutdownWsl(object sender, EventArgs e) { if (MessageBox.Show(this, $"Really shutdown WSL entirely? Please save all of the files before shutdown.", Text, MessageBoxButtons.YesNo, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button2) != DialogResult.Yes) { return; } var process = WslHelpers.CreateShutdownDistroProcess(); process.Start(); process.WaitForExit(); AppContext.RefreshDistroList(); }
private void Feature_TerminateDistro(object sender, EventArgs e) { var targetItem = GetSelectedDistroBySender(sender); if (targetItem == null) { return; } var process = WslHelpers.CreateTerminateSpecificDistroProcess(targetItem.DistroName); process.Start(); process.WaitForExit(); AppContext.RefreshDistroList(); }
private void UserQueryWorker_DoWork(object sender, DoWorkEventArgs e) { var request = e.Argument as DistroRootFsFindRequest; var targetUrl = new Uri("https://wslhub.com/WslManager/data/install-source.json", UriKind.Absolute); var httpRequest = (HttpWebRequest)HttpWebRequest.CreateHttp(targetUrl); using var httpResponse = (HttpWebResponse)httpRequest.GetResponse(); using var responseStream = httpResponse.GetResponseStream(); using var streamReader = new StreamReader(responseStream, new UTF8Encoding(false), true); var content = streamReader.ReadToEnd(); var model = (InstallSourceModel)JsonConvert.DeserializeObject(content, typeof(InstallSourceModel)); request.RootFsCandidates = model.RootFs.Where(x => string.Equals(WslHelpers.GetArchitectureName(), x.Value.Architecture, StringComparison.OrdinalIgnoreCase)).Select(x => x.Value).ToList(); e.Result = request.RootFsCandidates; }
private void ListView_ItemActivate(object sender, EventArgs e) { if (listView.SelectedItems.Count != 1) { return; } var targetItem = listView.SelectedItem?.RowObject as WslDistro; if (targetItem == null) { return; } var process = WslHelpers.CreateLaunchSpecificDistroProcess(targetItem.DistroName); process.Start(); AppContext.RefreshDistroList(); }
private void MainForm_Load(object sender, EventArgs e) { if (!File.Exists(WslHelpers.GetCanonicalWslExePath())) { MessageBox.Show(this, "This system does not have wsl CLI.", Text, MessageBoxButtons.OK, MessageBoxIcon.Stop, MessageBoxDefaultButton.Button1); Close(); return; } if (!File.Exists(WslHelpers.GetCanonicalWslHostExePath())) { MessageBox.Show(this, "It looks like WSL does not available on this system. Please install WSL first.", Text, MessageBoxButtons.OK, MessageBoxIcon.Stop, MessageBoxDefaultButton.Button1); Close(); return; } AppContext.RefreshDistroList(); }
private void Feature_RestoreDistro(object sender, EventArgs e) { using var dialog = new RestoreForm(); if (dialog.ShowDialog(this) != DialogResult.OK) { return; } var restoreRequest = dialog.ViewModel; if (restoreRequest == null) { return; } var process = WslHelpers.CreateImportDistroProcess(restoreRequest.NewName, restoreRequest.RestoreDirPath, restoreRequest.TarFilePath); process.Start(); AppContext.RefreshDistroList(); }
private void Feature_InstallDistro(object sender, EventArgs e) { using var dialog = new InstallForm(); if (dialog.ShowDialog(this) != DialogResult.OK) { return; } var installRequest = dialog.ViewModel; if (installRequest == null) { return; } var process = WslHelpers.CreateImportDistroProcess(installRequest.NewName, installRequest.InstallDirPath, installRequest.DownloadedTarFilePath); process.Start(); AppContext.RefreshDistroList(); }
private void NotepadProcess_Exited(object sender, EventArgs e) { if (InvokeRequired) { Invoke(new EventHandler(NotepadProcess_Exited), sender, e); return; } if (MessageBox.Show(this, $"To apply change, you need to shutdown the LXSS service. Please save all of the files before shutdown. Shtudown now?", Text, MessageBoxButtons.YesNo, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button2) != DialogResult.Yes) { return; } var process = WslHelpers.CreateShutdownDistroProcess(); process.Start(); process.WaitForExit(); AppContext.RefreshDistroList(); }
private void Feature_UnregisterDistro(object sender, EventArgs e) { var targetItem = GetSelectedDistroBySender(sender); if (targetItem == null) { return; } if (MessageBox.Show(this, $"Really unregister `{targetItem.DistroName}` distro? This cannot be undone.", Text, MessageBoxButtons.YesNo, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button2) != DialogResult.Yes) { return; } var process = WslHelpers.CreateUnregisterDistroProcess(targetItem.DistroName); process.Start(); process.WaitForExit(); AppContext.RefreshDistroList(); }