diff --git a/src/modules/FileLocksmith/FileLocksmithLibInterop/interop.cpp b/src/modules/FileLocksmith/FileLocksmithLibInterop/interop.cpp index c3dfaa2d4673..6d3eb6de2754 100644 --- a/src/modules/FileLocksmith/FileLocksmithLibInterop/interop.cpp +++ b/src/modules/FileLocksmith/FileLocksmithLibInterop/interop.cpp @@ -11,7 +11,6 @@ namespace FileLocksmith::Interop System::String^ name; System::UInt32 pid; array^ files; - System::Boolean isExpanded; // For helping in the UI }; System::String^ from_wstring_view(std::wstring_view str) @@ -77,7 +76,6 @@ namespace FileLocksmith::Interop { item->files[j] = from_wstring_view(result_cpp[i].files[j]); } - item->isExpanded = false; result[i] = item; } diff --git a/src/modules/FileLocksmith/FileLocksmithUI/ViewModels/MainViewModel.cs b/src/modules/FileLocksmith/FileLocksmithUI/ViewModels/MainViewModel.cs index 1448a5b7382b..38246cae119a 100644 --- a/src/modules/FileLocksmith/FileLocksmithUI/ViewModels/MainViewModel.cs +++ b/src/modules/FileLocksmith/FileLocksmithUI/ViewModels/MainViewModel.cs @@ -119,33 +119,49 @@ await Task.Run(() => private async void WatchProcess(ProcessResult process, CancellationToken token) { - Process handle = Process.GetProcessById((int)process.pid); try { - await handle.WaitForExitAsync(token); - } - catch (TaskCanceledException) - { - // Nothing to do, normal operation - } + Process handle = Process.GetProcessById((int)process.pid); + try + { + await handle.WaitForExitAsync(token); + } + catch (TaskCanceledException) + { + // Nothing to do, normal operation + } - if (handle.HasExited) + if (handle.HasExited) + { + Processes.Remove(process); + } + } + catch (Exception ex) { - Processes.Remove(process); + Logger.LogError($"Couldn't add a waiter to wait for a process to exit. PID = {process.pid} and Name = {process.name}.", ex); + Processes.Remove(process); // If we couldn't get an handle to the process or it has exited in the meanwhile, don't show it. } } [RelayCommand] public void EndTask(ProcessResult selectedProcess) { - Process handle = Process.GetProcessById((int)selectedProcess.pid); try { - handle.Kill(); + Process handle = Process.GetProcessById((int)selectedProcess.pid); + try + { + handle.Kill(); + } + catch (Exception ex) + { + Logger.LogError($"Couldn't kill process {selectedProcess.name} with PID {selectedProcess.pid}.", ex); + } } - catch (Exception) + catch (Exception ex) { - Logger.LogError($"Couldn't kill process {selectedProcess.name} with PID {selectedProcess.pid}."); + Logger.LogError($"Couldn't get an handle to kill process {selectedProcess.name} with PID {selectedProcess.pid}. Likely has been killed already.", ex); + Processes.Remove(selectedProcess); // If we couldn't get an handle to the process, remove it from the list, since it's likely been killed already. } } diff --git a/src/modules/FileLocksmith/FileLocksmithUI/Views/MainPage.xaml b/src/modules/FileLocksmith/FileLocksmithUI/Views/MainPage.xaml index f186b209d6af..07c12f27d502 100644 --- a/src/modules/FileLocksmith/FileLocksmithUI/Views/MainPage.xaml +++ b/src/modules/FileLocksmith/FileLocksmithUI/Views/MainPage.xaml @@ -103,7 +103,7 @@ SelectionMode="None"> - +