π©Ί GeneralUpdate Troubleshooting
Comprehensive diagnostic system covering 50+ known issues, all traceable to GitHub/Gitee Issues or code audit findings.
Workflowβ
1. Symptom Collection
βββ What is the user's symptom?
βββ Error message/stack trace?
βββ GeneralUpdate version?
βββ Platform (Windows/Linux/macOS)?
βββ Update strategy (Standard/OSS/Silent)?
2. Symptom Matching β Lookup known issues
βββ Match found β Provide root cause + fix + code
βββ No match β Execute 6-step universal diagnostic
3. Provide Fix
βββ Specific code changes, config adjustments, version upgrade suggestions
βββ Preventive measures
4. Verify
βββ Confirm the fix resolves the issue
Symptom Severity Levelsβ
| Level | Color | Meaning | Count |
|---|---|---|---|
| C | π΄ Critical | Blocking failure, data corruption, security vulnerability | 8 |
| H | π High | Scenario blocking, feature failure, upgrade needed | 11 |
| M | π‘ Medium | Functionality degraded, configuration adjustment needed | 20 |
| L | π΅ Low | Code smell, edge cases, known behavior | 12 |
C Level (Critical) β Blocks Updatesβ
| Issue | Cause | Solution |
|---|---|---|
| Update not starting | LaunchAsync() not called / UpgradeApp.exe not deployed | Ensure Bootstrap.LaunchAsync() is called in Main() |
| Method not found | Client and Upgrade NuGet versions differ | Unify NuGet versions, clean bin/obj and rebuild |
| Path too long (>260) | Windows path limit | Shorten install path |
| IPC exposure | IPC encryption key hardcoded | Use strong AppSecretKey; upgrade to v10.4.6+ |
| Cross-tenant leakage | Missing server multi-tenant isolation | Independent ProductId + AppSecretKey per tenant |
| ZIP traversal write | Malicious ZIP with ../ paths | v10.4.6+ already fixed |
| BSDIFF integer overflow | Large file diff calculation overflow | Use HDiffPatch algorithm |
| Silent mode not working | Process exit not triggered | Ensure Close() or Dispose() is called correctly |
H Level (High) β Severe but Non-Blockingβ
| Issue | Cause | Solution |
|---|---|---|
| Infinite update loop | manifest.json version not updated | Upgrade to v10.4.6+ (WriteBack fixed) |
| OSS no update found | Bucket config wrong / incorrect versions.json | curl test OSS URL |
| File in use | Target file locked | Close main process before update |
| SignalR push not responding | Connection dropped or auth failure | Check SignalR Hub status and Token config |
| Bowl not monitoring | Process name misconfigured | Verify ProcessNameOrId matches actual process |
M Level (Medium) β Functionality Degradedβ
| Issue | Cause | Solution |
|---|---|---|
| AOT build failure | Reflection not adapted for NativeAOT | Add [DynamicDependency] attributes |
| SignalR reconnection slow | RetryDelay too long | Adjust retry parameters |
| Logs not outputting | Log path permission issue | Check %TEMP%/GeneralUpdate/logs/ permissions |
| Multi-tenant config wrong | ProductId collision | Ensure unique ProductId per tenant |
L Level (Low) β Non-Criticalβ
| Issue | Cause | Solution |
|---|---|---|
| Package too large | Differential not enabled | Differential is embedded in Core, enable PatchEnabled |
| First update slow | CDN cold start | Warm up CDN |
| Config lost after update | Blacklist doesn't include config dir | Ensure SkipDirectorys includes config folder |
6-Step Universal Diagnosticβ
When the issue can't be directly matched, follow these 6 steps:
- Version consistency check β Are Client and Upgrade NuGet versions the same?
- manifest.json verification β Does the file exist? Are fields correct?
- UpgradeApp existence β Is UpgradeApp.exe in the expected directory?
- Network accessibility β Can you curl the UpdateUrl?
- Log analysis β Check logs in
%TEMP%/GeneralUpdate/logs/ - Minimal reproduction β Start with Minimal integration, gradually add complexity
Log File Locationsβ
| Platform | Default Path |
|---|---|
| Windows | %TEMP%/GeneralUpdate/logs/ |
| Linux | /tmp/GeneralUpdate/logs/ |
Security Notesβ
- AppSecretKey management β hardcoding in the client is a last resort; prefer startup arguments or environment variables
- Rotate IPC encryption keys regularly
- Disable debug logging in production