|
23 | 23 | namespace GeneralUpdate.Core.Silent; |
24 | 24 |
|
25 | 25 | /// <summary> |
26 | | -/// Silent update poll orchestrator �?periodically checks for updates, |
| 26 | +/// Silent update poll orchestrator — periodically checks for updates, |
27 | 27 | /// downloads them in the background, and optionally auto-installs. |
28 | 28 | /// Replaces the legacy <c>SilentUpdateMode</c> class. |
29 | 29 | /// </summary> |
@@ -126,7 +126,7 @@ private async Task PrepareUpdateIfNeededAsync(CancellationToken token) |
126 | 126 | return; |
127 | 127 | } |
128 | 128 |
|
129 | | - // ══�?Hooks: allow cancellation before starting update ══�? |
| 129 | + // ══— Hooks: allow cancellation before starting update ══— |
130 | 130 | var updateCtx = new UpdateContext( |
131 | 131 | _configInfo.MainAppName ?? _configInfo.AppName, |
132 | 132 | _configInfo.InstallPath, |
@@ -173,7 +173,7 @@ private async Task PrepareUpdateIfNeededAsync(CancellationToken token) |
173 | 173 | _configInfo.SkipDirectorys ?? BlackListDefaults.DefaultSkipDirectories); |
174 | 174 | _configInfo.ProcessInfo = JsonSerializer.Serialize(_preparedProcessInfo, ProcessInfoJsonContext.Default.ProcessInfo); |
175 | 175 |
|
176 | | - // ══�?Reporter: update started ══�? |
| 176 | + // ══— Reporter: update started ══— |
177 | 177 | var startTime = DateTimeOffset.UtcNow; |
178 | 178 | if (_reporter != null) |
179 | 179 | { |
@@ -203,7 +203,7 @@ await _reporter.ReportAsync(new UpdateReport( |
203 | 203 | downloadElapsed = report.TotalDuration; |
204 | 204 | GeneralTracer.Info($"SilentPollOrchestrator: download complete. Success={downloadSuccessCount}, Failed={downloadFailedCount}"); |
205 | 205 |
|
206 | | - // ══�?Hooks + Reporter: download completed ══�? |
| 206 | + // ══— Hooks + Reporter: download completed ══— |
207 | 207 | if (_hooks != null) |
208 | 208 | { |
209 | 209 | try |
@@ -268,7 +268,7 @@ await _reporter.ReportAsync(new UpdateReport( |
268 | 268 | GeneralTracer.Info("SilentPollOrchestrator: update prepared."); |
269 | 269 | Interlocked.Exchange(ref _prepared, 1); |
270 | 270 |
|
271 | | - // ══�?Hooks + Reporter: update applied ══�? |
| 271 | + // ══— Hooks + Reporter: update applied ══— |
272 | 272 | if (_hooks != null) |
273 | 273 | { |
274 | 274 | try { await _hooks.OnAfterUpdateAsync(updateCtx).ConfigureAwait(false); } |
@@ -318,7 +318,7 @@ private void OnProcessExit(object? sender, EventArgs e) |
318 | 318 | { |
319 | 319 | var updaterPath = Path.Combine(_configInfo.InstallPath, _configInfo.AppName); |
320 | 320 |
|
321 | | - // Start the upgrade process first �?it will call ReceiveAsync in its constructor. |
| 321 | + // Start the upgrade process first — it will call ReceiveAsync in its constructor. |
322 | 322 | // We then call SendAsync which creates the NamedPipe server; the upgrade's |
323 | 323 | // client connects to it. Auto-fallback (SharedMemory > EncryptedFile) handles |
324 | 324 | // timing gaps where the named pipe handshake doesn't complete in time. |
|
0 commit comments