Skip to content

Commit 43f0c9f

Browse files
committed
Force process termination when updating
1 parent ee85cfb commit 43f0c9f

File tree

5 files changed

+25
-1
lines changed

5 files changed

+25
-1
lines changed

src/Files.App/App.xaml.cs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -307,7 +307,9 @@ private async void Window_Closed(object sender, WindowEventArgs args)
307307
return;
308308
}
309309

310-
if (Ioc.Default.GetRequiredService<IUserSettingsService>().GeneralSettingsService.LeaveAppRunning &&
310+
var userSettingsService = Ioc.Default.GetRequiredService<IUserSettingsService>();
311+
if (userSettingsService.GeneralSettingsService.LeaveAppRunning &&
312+
!userSettingsService.AppSettingsService.ForceProcessTermination &&
311313
!Process.GetProcessesByName("Files").Any(x => x.Id != Process.GetCurrentProcess().Id))
312314
{
313315
// Close open content dialogs
@@ -341,6 +343,7 @@ private async void Window_Closed(object sender, WindowEventArgs args)
341343

342344
return;
343345
}
346+
userSettingsService.AppSettingsService.ForceProcessTermination = false;
344347

345348
// Method can take a long time, make sure the window is hidden
346349
await Task.Yield();

src/Files.App/Services/Settings/AppSettingsService.cs

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,12 @@ public bool RestoreTabsOnStartup
2727
set => Set(value);
2828
}
2929

30+
public bool ForceProcessTermination
31+
{
32+
get => Get(false);
33+
set => Set(value);
34+
}
35+
3036
protected override void RaiseOnSettingChangedEvent(object sender, SettingChangedEventArgs e)
3137
{
3238
switch (e.SettingName)
@@ -37,6 +43,9 @@ protected override void RaiseOnSettingChangedEvent(object sender, SettingChanged
3743
case nameof(RestoreTabsOnStartup):
3844
Analytics.TrackEvent($"Set {e.SettingName} to {e.NewValue}");
3945
break;
46+
case nameof(ForceProcessTermination):
47+
Analytics.TrackEvent($"Set {e.SettingName} to {e.NewValue}");
48+
break;
4049
}
4150

4251
base.RaiseOnSettingChangedEvent(sender, e);

src/Files.App/Services/SideloadUpdateService.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,8 @@ public sealed class SideloadUpdateService : ObservableObject, IUpdateService, ID
3333

3434
private ILogger? Logger { get; } = Ioc.Default.GetRequiredService<ILogger<App>>();
3535

36+
private IUserSettingsService UserSettingsService { get; } = Ioc.Default.GetRequiredService<IUserSettingsService>();
37+
3638
private string PackageName { get; } = Package.Current.Id.Name;
3739

3840
private Version PackageVersion { get; } = new(
@@ -229,6 +231,7 @@ private async Task ApplyPackageUpdate()
229231
try
230232
{
231233
var restartStatus = RegisterApplicationRestart(null, 0);
234+
UserSettingsService.AppSettingsService.ForceProcessTermination = true;
232235

233236
Logger?.LogInformation($"Register for restart: {restartStatus}");
234237

src/Files.App/Services/UpdateService.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@ internal sealed class UpdateService : ObservableObject, IUpdateService
1717
private StoreContext? _storeContext;
1818
private IList<StorePackageUpdate>? _updatePackages;
1919

20+
private IUserSettingsService UserSettingsService { get; } = Ioc.Default.GetRequiredService<IUserSettingsService>();
21+
2022
private bool IsMandatory => _updatePackages?.Where(e => e.Mandatory).ToList().Count >= 1;
2123

2224
private bool _isUpdateAvailable;
@@ -109,6 +111,7 @@ public async Task CheckForUpdates()
109111
private async Task DownloadAndInstall()
110112
{
111113
App.SaveSessionTabs();
114+
UserSettingsService.AppSettingsService.ForceProcessTermination = true;
112115
var downloadOperation = _storeContext?.RequestDownloadAndInstallStorePackageUpdatesAsync(_updatePackages);
113116
await downloadOperation.AsTask();
114117
}

src/Files.Core/Services/Settings/IAppSettingsService.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,5 +17,11 @@ public interface IAppSettingsService : IBaseSettingsService, INotifyPropertyChan
1717
/// This is used when prompting users to restart after changing the app language.
1818
/// </summary>
1919
bool RestoreTabsOnStartup { get; set; }
20+
21+
/// <summary>
22+
/// Gets or sets a value indicating whether or not to force process termination regardless of background running settings.
23+
/// This is used when restarting the app to update.
24+
/// </summary>
25+
bool ForceProcessTermination { get; set; }
2026
}
2127
}

0 commit comments

Comments
 (0)