5
5
#endif
6
6
7
7
#define Name " QModManager" ; The name of the game will be added after it
8
- #define Version " 2.0. 1"
8
+ #define Version " 2.1"
9
9
#define Author " the QModManager dev team"
10
10
#define URL " https://github.com/QModManager/QModManager"
11
11
#define SupportURL " https://discord.gg/UpWuWwq"
@@ -64,7 +64,9 @@ Source: "..\Dependencies\0Harmony-1.2.0.1.dll"; DestDir: "{app}\Subnautica_Data\
64
64
Source : " ..\Dependencies\AssetsTools.NET.dll" ; DestDir : " {app} \Subnautica_Data\Managed" ; Flags : IgnoreVersion ; Check : IsSubnauticaApp
65
65
Source : " ..\Dependencies\cldb.dat" ; DestDir : " {app} \Subnautica_Data\Managed" ; Flags : IgnoreVersion ; Check : IsSubnauticaApp
66
66
Source : " ..\Dependencies\Mono.Cecil.dll" ; DestDir : " {app} \Subnautica_Data\Managed" ; Flags : IgnoreVersion ; Check : IsSubnauticaApp
67
+ Source : " ..\Dependencies\SemVer.dll" ; DestDir : " {app} \Subnautica_Data\Managed" ; Flags : IgnoreVersion ; Check : IsSubnauticaApp
67
68
Source : " ..\Build\QModInstaller.dll" ; DestDir : " {app} \Subnautica_Data\Managed" ; Flags : IgnoreVersion ; Check : IsSubnauticaApp
69
+ Source : " ..\Build\QModInstaller.xml" ; DestDir : " {app} \Subnautica_Data\Managed" ; Flags : IgnoreVersion ; Check : IsSubnauticaApp
68
70
Source : " ..\Build\QModManager.exe" ; DestDir : " {app} \Subnautica_Data\Managed" ; Flags : IgnoreVersion ; Check : IsSubnauticaApp
69
71
Source : " ..\Assets\QModManagerAssets.unity3d" ; DestDir : " {app} \Subnautica_Data\Managed" ; Flags : IgnoreVersion ; Check : IsSubnauticaApp
70
72
; Below Zero
@@ -73,7 +75,9 @@ Source: "..\Dependencies\0Harmony-1.2.0.1.dll"; DestDir: "{app}\SubnauticaZero_D
73
75
Source : " ..\Dependencies\AssetsTools.NET.dll" ; DestDir : " {app} \SubnauticaZero_Data\Managed" ; Flags : IgnoreVersion ; Check : IsBelowZeroApp
74
76
Source : " ..\Dependencies\cldb2018.dat" ; DestDir : " {app} \SubnauticaZero_Data\Managed" ; Flags : IgnoreVersion ; Check : IsBelowZeroApp
75
77
Source : " ..\Dependencies\Mono.Cecil.dll" ; DestDir : " {app} \SubnauticaZero_Data\Managed" ; Flags : IgnoreVersion ; Check : IsBelowZeroApp
78
+ Source : " ..\Dependencies\SemVer.dll" ; DestDir : " {app} \SubnauticaZero_Data\Managed" ; Flags : IgnoreVersion ; Check : IsBelowZeroApp
76
79
Source : " ..\Build\QModInstaller.dll" ; DestDir : " {app} \SubnauticaZero_Data\Managed" ; Flags : IgnoreVersion ; Check : IsBelowZeroApp
80
+ Source : " ..\Build\QModInstaller.xml" ; DestDir : " {app} \SubnauticaZero_Data\Managed" ; Flags : IgnoreVersion ; Check : IsBelowZeroApp
77
81
Source : " ..\Build\QModManager.exe" ; DestDir : " {app} \SubnauticaZero_Data\Managed" ; Flags : IgnoreVersion ; Check : IsBelowZeroApp
78
82
Source : " ..\Assets\QModManagerAssets.unity3d" ; DestDir : " {app} \SubnauticaZero_Data\Managed" ; Flags : IgnoreVersion ; Check : IsBelowZeroApp
79
83
@@ -111,7 +115,7 @@ Name: "qmm\bz"; Description: "Install for Below Zero"; Flags: exclusive fixed
111
115
112
116
[Code]
113
117
// Import stuff from InstallerExtensions.dll
114
- function PathsEqual (pathone, pathtwo: WideString): Boolean; external ' PathsEqual@files:InstallerExtensions.dll stdcall' ;
118
+ function PathsEqual (pathone, pathtwo: WideString): Boolean; external ' PathsEqual@files:InstallerExtensions.dll stdcall delayload ' ;
115
119
116
120
function IsSubnautica (path: String): Boolean;
117
121
begin
@@ -157,7 +161,7 @@ begin
157
161
end
158
162
else if (IsBelowZeroApp()) then
159
163
begin
160
- Result := ' {#Name} (Below zero )'
164
+ Result := ' {#Name} (Below Zero )'
161
165
end
162
166
else
163
167
begin
@@ -457,8 +461,99 @@ end;
457
461
procedure LoadVCLStyle (VClStyleFile: String); external ' LoadVCLStyleW@files:VclStylesInno.dll stdcall' ;
458
462
procedure UnLoadVCLStyles ; external ' UnLoadVCLStyles@files:VclStylesInno.dll stdcall' ;
459
463
464
+ // Check for .NET version -- code from http://www.kynosarges.de/DotNetVersion.html
465
+ function IsDotNetDetected (version: string; service: cardinal): boolean;
466
+ // Indicates whether the specified version and service pack of the .NET Framework is installed.
467
+ //
468
+ // version -- Specify one of these strings for the required .NET Framework version:
469
+ // 'v1.1' .NET Framework 1.1
470
+ // 'v2.0' .NET Framework 2.0
471
+ // 'v3.0' .NET Framework 3.0
472
+ // 'v3.5' .NET Framework 3.5
473
+ // 'v4\Client' .NET Framework 4.0 Client Profile
474
+ // 'v4\Full' .NET Framework 4.0 Full Installation
475
+ // 'v4.5' .NET Framework 4.5
476
+ // 'v4.5.1' .NET Framework 4.5.1
477
+ // 'v4.5.2' .NET Framework 4.5.2
478
+ // 'v4.6' .NET Framework 4.6
479
+ // 'v4.6.1' .NET Framework 4.6.1
480
+ // 'v4.6.2' .NET Framework 4.6.2
481
+ // 'v4.7' .NET Framework 4.7
482
+ //
483
+ // service -- Specify any non-negative integer for the required service pack level:
484
+ // 0 No service packs required
485
+ // 1, 2, etc. Service pack 1, 2, etc. required
486
+ var
487
+ key, versionKey: string;
488
+ install, release, serviceCount, versionRelease: cardinal;
489
+ success: boolean;
490
+ begin
491
+ versionKey := version;
492
+ versionRelease := 0 ;
493
+
494
+ // .NET 1.1 and 2.0 embed release number in version key
495
+ if version = ' v1.1' then begin
496
+ versionKey := ' v1.1.4322' ;
497
+ end else if version = ' v2.0' then begin
498
+ versionKey := ' v2.0.50727' ;
499
+ end
500
+
501
+ // .NET 4.5 and newer install as update to .NET 4.0 Full
502
+ else if Pos(' v4.' , version) = 1 then begin
503
+ versionKey := ' v4\Full' ;
504
+ case version of
505
+ ' v4.5' : versionRelease := 378389 ;
506
+ ' v4.5.1' : versionRelease := 378675 ; // 378758 on Windows 8 and older
507
+ ' v4.5.2' : versionRelease := 379893 ;
508
+ ' v4.6' : versionRelease := 393295 ; // 393297 on Windows 8.1 and older
509
+ ' v4.6.1' : versionRelease := 394254 ; // 394271 before Win10 November Update
510
+ ' v4.6.2' : versionRelease := 394802 ; // 394806 before Win10 Anniversary Update
511
+ ' v4.7' : versionRelease := 460798 ; // 460805 before Win10 Creators Update
512
+ end ;
513
+ end ;
514
+
515
+ // installation key group for all .NET versions
516
+ key := ' SOFTWARE\Microsoft\NET Framework Setup\NDP\' + versionKey;
517
+
518
+ // .NET 3.0 uses value InstallSuccess in subkey Setup
519
+ if Pos(' v3.0' , version) = 1 then begin
520
+ success := RegQueryDWordValue(HKLM, key + ' \Setup' , ' InstallSuccess' , install);
521
+ end else begin
522
+ success := RegQueryDWordValue(HKLM, key, ' Install' , install);
523
+ end ;
524
+
525
+ // .NET 4.0 and newer use value Servicing instead of SP
526
+ if Pos(' v4' , version) = 1 then begin
527
+ success := success and RegQueryDWordValue(HKLM, key, ' Servicing' , serviceCount);
528
+ end else begin
529
+ success := success and RegQueryDWordValue(HKLM, key, ' SP' , serviceCount);
530
+ end ;
531
+
532
+ // .NET 4.5 and newer use additional value Release
533
+ if versionRelease > 0 then begin
534
+ success := success and RegQueryDWordValue(HKLM, key, ' Release' , release);
535
+ success := success and (release >= versionRelease);
536
+ end ;
537
+
538
+ result := success and (install = 1 ) and (serviceCount >= service);
539
+ end ;
540
+
460
541
function InitializeSetup (): Boolean;
542
+ var
543
+ ErrCode: Integer;
461
544
begin
545
+ if not IsDotNetDetected(' v3.5' , 0 ) then
546
+ begin
547
+ if MsgBox(' QModManager requires Microsoft .NET Framework 3.5.' + #13 #10 + ' Would you like to install it now?' , mbCriticalError, MB_YESNO) = IDYES then
548
+ begin
549
+ if not ShellExec(' open' , ' https://docs.microsoft.com/en-us/dotnet/framework/install/dotnet-35-windows-10' , ' ' , ' ' , SW_SHOW, ewNoWait, ErrCode) then
550
+ begin
551
+ SysErrorMessage(ErrCode);
552
+ end
553
+ end ;
554
+ result := false;
555
+ Exit
556
+ end ;
462
557
appIsSet := false
463
558
if IsAppRunning(' Subnautica.exe' ) or IsAppRunning(' SubnauticaZero.exe' ) then
464
559
begin
@@ -524,4 +619,4 @@ procedure DeinitializeSetup();
524
619
begin
525
620
// Unload skin
526
621
UnLoadVCLStyles;
527
- end ;
622
+ end ;
0 commit comments