fix(windows): switch to system-wide VC++ redistributable, purge legacy app-local CRT DLLs, and harden documentation viewer
This commit is contained in:
1 parent
f5838f09b5
commit
ced3aa1f09
4 files changed
+39
-71
No files matched your search
+3
-4
@@ -49,7 +49,7 @@ flutter build apk --release --obfuscate --split-debug-info=build/app/outputs/sym
|
||||
The Windows client runs natively on Windows 10 and Windows 11 (64-bit).
|
||||
|
||||
### Prerequisites:
|
||||
- **Microsoft Visual C++ 2015–2022 Redistributable (x64)** (Core runtime libraries `vcruntime140_1.dll`, `msvcp140.dll`, etc. are bundled directly with the release binaries; the installer also automatically installs the full redistributable if missing).
|
||||
- **Microsoft Visual C++ 2015–2022 Redistributable (x64)** (v14.30+ / VS 2022 toolset; the installer automatically checks system compatibility and installs the official Microsoft redistributable silently if missing or outdated).
|
||||
- **Microsoft .NET Desktop Runtime 6.0/8.0+ (x64)** (automatically detected and installed silently by setup if missing).
|
||||
|
||||
---
|
||||
@@ -73,12 +73,11 @@ flutter build windows --release --obfuscate --split-debug-info=build/windows/sym
|
||||
|
||||
### B. Compiling the Windows Inno Setup Installer (`TIS_RMS_Client.iss`)
|
||||
|
||||
The installer script [`frontend/TIS_RMS_Client.iss`](file:///d:/Capstone/TIS_RIS_Server_Manager/TIS_RMS/frontend/TIS_RMS_Client.iss) packages the app into an ultra-compact standalone setup file (`TIS_RMS_Client_Setup_v<version>.exe` ~**16.7 MB**).
|
||||
The installer script [`frontend/TIS_RMS_Client.iss`](file:///f:/SumbrerongBato/tis_rms_server/frontend/TIS_RMS_Client.iss) packages the app into an ultra-compact standalone setup file (`TIS_RMS_Client_Setup_v<version>.exe` ~**16.7 MB**).
|
||||
|
||||
#### Features:
|
||||
- **Small File Size (~17 MB)**: Uses `lzma2/ultra64` solid 64MB dictionary compression.
|
||||
- **Bundled VC++ Runtime DLLs**: Packages MSVC CRT libraries (`vcruntime140.dll`, `vcruntime140_1.dll`, `msvcp140.dll`, etc.) directly into the application folder to prevent missing DLL crashes.
|
||||
- **Automated VC++ & .NET Runtime Setup**: Checks system registry and automatically installs Microsoft Visual C++ 2015-2022 Redistributable and Microsoft .NET Desktop Runtime silently if missing.
|
||||
- **Automated System-Wide VC++ & .NET Runtime Setup**: Automatically detects whether a compatible Visual Studio 2022 (v14.30+) x64 runtime is installed in Windows (`System32`) and silently installs Microsoft's official `vc_redist.x64.exe` if missing or outdated. Also purges legacy app-local CRT DLLs to prevent ABI mismatch crashes.
|
||||
- **Selectable Destination Path**: Lets the user choose where to install (defaults to `C:\Program Files\TIS RMS Client`).
|
||||
- **Desktop Shortcut Checkbox**: Optional checkbox on the tasks page to create a desktop shortcut with the official school icon logo.
|
||||
- **Start Menu & Uninstaller**: Registers a Start Menu program group and includes a clean uninstaller in Windows *Apps & Features* / *Settings*.
|
||||
|
||||
@@ -58,12 +58,19 @@ Name: "english"; MessagesFile: "compiler:Default.isl"
|
||||
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked
|
||||
|
||||
[Files]
|
||||
; Main application binaries and libraries (excludes unnecessary dev .lib and .exp files for smaller footprint)
|
||||
; Main application binaries and libraries (excludes unnecessary dev .lib/.exp and prevents app-local CRT poisoning)
|
||||
Source: "build\windows\x64\runner\Release\*.exe"; DestDir: "{app}"; Flags: ignoreversion
|
||||
Source: "build\windows\x64\runner\Release\*.dll"; DestDir: "{app}"; Flags: ignoreversion
|
||||
Source: "build\windows\x64\runner\Release\*.dll"; DestDir: "{app}"; Flags: ignoreversion; Excludes: "msvcp140*.dll,vcruntime140*.dll,concrt140.dll,vccorlib140.dll"
|
||||
Source: "build\windows\x64\runner\Release\data\*"; DestDir: "{app}\data"; Flags: ignoreversion recursesubdirs createallsubdirs
|
||||
Source: "{#MyAppIcon}"; DestDir: "{app}"; DestName: "app_icon.ico"; Flags: ignoreversion
|
||||
|
||||
[InstallDelete]
|
||||
; Clean up any legacy app-local MSVC CRT DLLs from older installations so app always uses C:\Windows\System32
|
||||
Type: files; Name: "{app}\msvcp140*.dll"
|
||||
Type: files; Name: "{app}\vcruntime140*.dll"
|
||||
Type: files; Name: "{app}\concrt140.dll"
|
||||
Type: files; Name: "{app}\vccorlib140.dll"
|
||||
|
||||
[Icons]
|
||||
; Start menu shortcut
|
||||
Name: "{group}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; IconFilename: "{app}\app_icon.ico"
|
||||
@@ -77,14 +84,30 @@ Name: "{autodesktop}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; IconFilen
|
||||
Filename: "{app}\{#MyAppExeName}"; Description: "{cm:LaunchProgram,{#StringChange(MyAppName, '&', '&&')}}"; Flags: nowait postinstall skipifsilent
|
||||
|
||||
[Code]
|
||||
// Helper function to verify Microsoft Visual C++ 2015-2022 Redistributable (x64)
|
||||
function IsVCRedistInstalled: Boolean;
|
||||
// Helper function to verify Microsoft Visual C++ 2015-2022 Redistributable (x64, Minor >= 30 for VS 2022 compatibility)
|
||||
function IsVCRedistCompatible: Boolean;
|
||||
var
|
||||
installed: Cardinal;
|
||||
minor: Cardinal;
|
||||
begin
|
||||
Result := RegQueryDWordValue(HKLM64, 'SOFTWARE\Microsoft\VisualStudio\14.0\VC\Runtimes\X64', 'Installed', installed) and (installed = 1);
|
||||
Result := False;
|
||||
if RegQueryDWordValue(HKLM64, 'SOFTWARE\Microsoft\VisualStudio\14.0\VC\Runtimes\X64', 'Installed', installed) and (installed = 1) then
|
||||
begin
|
||||
if RegQueryDWordValue(HKLM64, 'SOFTWARE\Microsoft\VisualStudio\14.0\VC\Runtimes\X64', 'Minor', minor) then
|
||||
Result := (minor >= 30) // Minor 30+ indicates Visual Studio 2022 or newer
|
||||
else
|
||||
Result := True;
|
||||
end;
|
||||
if not Result then
|
||||
Result := RegQueryDWordValue(HKLM, 'SOFTWARE\Microsoft\VisualStudio\14.0\VC\Runtimes\X64', 'Installed', installed) and (installed = 1);
|
||||
begin
|
||||
if RegQueryDWordValue(HKLM, 'SOFTWARE\Microsoft\VisualStudio\14.0\VC\Runtimes\X64', 'Installed', installed) and (installed = 1) then
|
||||
begin
|
||||
if RegQueryDWordValue(HKLM, 'SOFTWARE\Microsoft\VisualStudio\14.0\VC\Runtimes\X64', 'Minor', minor) then
|
||||
Result := (minor >= 30)
|
||||
else
|
||||
Result := True;
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
|
||||
// Helper function to verify Microsoft .NET Desktop Runtime
|
||||
@@ -101,8 +124,8 @@ var
|
||||
begin
|
||||
if CurStep = ssPostInstall then
|
||||
begin
|
||||
// If Microsoft Visual C++ 2015-2022 Redistributable (x64) is not installed, automatically install it silently
|
||||
if not IsVCRedistInstalled then
|
||||
// If Microsoft Visual C++ 2015-2022 Redistributable (x64) is not installed or outdated (< VS 2022), automatically install it silently
|
||||
if not IsVCRedistCompatible then
|
||||
begin
|
||||
Exec('powershell.exe', '-NoProfile -ExecutionPolicy Bypass -Command "$ProgressPreference = ''SilentlyContinue''; try { if (Get-Command winget -ErrorAction SilentlyContinue) { winget install --id Microsoft.VCRedist.2015+.x64 --silent --accept-package-agreements --accept-source-agreements } else { $url = ''https://aka.ms/vs/17/release/vc_redist.x64.exe''; $out = ''$env:TEMP\vc_redist.x64.exe''; Invoke-WebRequest -Uri $url -OutFile $out; Start-Process -FilePath $out -ArgumentList ''/install /quiet /norestart'' -Wait } } catch {}"', '', SW_HIDE, ewWaitUntilTerminated, ResultCode);
|
||||
end;
|
||||
|
||||
@@ -339,7 +339,9 @@ class _WindowsDocViewState extends State<_WindowsDocView> {
|
||||
|
||||
if (_isInitialized) {
|
||||
try {
|
||||
_controller.dispose();
|
||||
_controller.dispose().catchError((e) {
|
||||
debugPrint('[DocumentationScreen] webview async dispose error: $e');
|
||||
});
|
||||
} catch (e) {
|
||||
debugPrint('[DocumentationScreen] webview dispose error: $e');
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user