Skip to content

Commit 7c8ca2d

Browse files
committed
Fix: Fixed crash that would sometimes occur when updating
1 parent 5652daa commit 7c8ca2d

File tree

1 file changed

+54
-16
lines changed

1 file changed

+54
-16
lines changed

src/Files.App/Services/App/AppUpdateSideloadService.cs

+54-16
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
using Microsoft.Extensions.Logging;
66
using System.IO;
77
using System.Net.Http;
8+
using System.Runtime.InteropServices;
89
using System.Xml.Serialization;
910
using Windows.ApplicationModel;
1011
using Windows.Management.Deployment;
@@ -123,34 +124,71 @@ public async Task CheckForUpdatesAsync()
123124

124125
public async Task CheckAndUpdateFilesLauncherAsync()
125126
{
126-
var destFolderPath = Path.Combine(UserDataPaths.GetDefault().LocalAppData, "Files");
127-
var destExeFilePath = Path.Combine(destFolderPath, "Files.App.Launcher.exe");
128-
129-
if (File.Exists(destExeFilePath))
127+
try
130128
{
129+
var destFolderPath = Path.Combine(UserDataPaths.GetDefault().LocalAppData, "Files");
130+
var destExeFilePath = Path.Combine(destFolderPath, "Files.App.Launcher.exe");
131+
132+
if (!File.Exists(destExeFilePath))
133+
return;
134+
131135
var hashEqual = false;
132-
var srcHashFile = await StorageFile.GetFileFromApplicationUriAsync(new Uri("ms-appx:///Assets/FilesOpenDialog/Files.App.Launcher.exe.sha256"));
136+
var srcHashFile = await StorageFile.GetFileFromApplicationUriAsync(new Uri("ms-appx:///Assets/FilesOpenDialog/Files.App.Launcher.exe.sha256"))
137+
.AsTask().ConfigureAwait(false);
133138
var destHashFilePath = Path.Combine(destFolderPath, "Files.App.Launcher.exe.sha256");
134139

135140
if (File.Exists(destHashFilePath))
136141
{
137-
await using var srcStream = (await srcHashFile.OpenReadAsync()).AsStream();
138-
await using var destStream = File.OpenRead(destHashFilePath);
139-
140-
hashEqual = HashEqual(srcStream, destStream);
142+
try
143+
{
144+
await using var srcStream = (await srcHashFile.OpenReadAsync().AsTask().ConfigureAwait(false)).AsStream();
145+
await using var destStream = File.OpenRead(destHashFilePath);
146+
hashEqual = HashEqual(srcStream, destStream);
147+
}
148+
catch (COMException ex)
149+
{
150+
Logger?.LogWarning(ex, "Failed to compare hash files");
151+
return;
152+
}
153+
catch (IOException ex)
154+
{
155+
Logger?.LogWarning(ex, "IO error while reading hash files");
156+
return;
157+
}
141158
}
142159

143160
if (!hashEqual)
144161
{
145-
var srcExeFile = await StorageFile.GetFileFromApplicationUriAsync(new Uri("ms-appx:///Assets/FilesOpenDialog/Files.App.Launcher.exe"));
146-
var destFolder = await StorageFolder.GetFolderFromPathAsync(destFolderPath);
147-
148-
await srcExeFile.CopyAsync(destFolder, "Files.App.Launcher.exe", NameCollisionOption.ReplaceExisting);
149-
await srcHashFile.CopyAsync(destFolder, "Files.App.Launcher.exe.sha256", NameCollisionOption.ReplaceExisting);
150-
151-
Logger?.LogInformation("Files.App.Launcher updated.");
162+
try
163+
{
164+
var srcExeFile = await StorageFile.GetFileFromApplicationUriAsync(new Uri("ms-appx:///Assets/FilesOpenDialog/Files.App.Launcher.exe"))
165+
.AsTask().ConfigureAwait(false);
166+
var destFolder = await StorageFolder.GetFolderFromPathAsync(destFolderPath).AsTask().ConfigureAwait(false);
167+
168+
await srcExeFile.CopyAsync(destFolder, "Files.App.Launcher.exe", NameCollisionOption.ReplaceExisting)
169+
.AsTask().ConfigureAwait(false);
170+
await srcHashFile.CopyAsync(destFolder, "Files.App.Launcher.exe.sha256", NameCollisionOption.ReplaceExisting)
171+
.AsTask().ConfigureAwait(false);
172+
173+
Logger?.LogInformation("Files.App.Launcher updated.");
174+
}
175+
catch (COMException ex)
176+
{
177+
Logger?.LogError(ex, ex.Message);
178+
return;
179+
}
180+
catch (UnauthorizedAccessException ex)
181+
{
182+
Logger?.LogError(ex, ex.Message);
183+
return;
184+
}
152185
}
153186
}
187+
catch (Exception ex)
188+
{
189+
Logger?.LogError(ex, ex.Message);
190+
return;
191+
}
154192

155193
bool HashEqual(Stream a, Stream b)
156194
{

0 commit comments

Comments
 (0)