diff --git a/NexusClient.Interface/ProgrammeMetadata.cs b/NexusClient.Interface/ProgrammeMetadata.cs index 2d2ff7ff9..d9079146c 100644 --- a/NexusClient.Interface/ProgrammeMetadata.cs +++ b/NexusClient.Interface/ProgrammeMetadata.cs @@ -24,7 +24,7 @@ public static class ProgrammeMetadata /// (c) should change when there is a minor alteration to the programme. /// Something akin to a minor bug fix, or a typo correction. /// - public const string VersionString = "0.63.18"; + public const string VersionString = "0.63.19"; /// /// Gets the full name of the mod manager. diff --git a/NexusClient/data/releasenotes.rtf b/NexusClient/data/releasenotes.rtf index 65d88d251..e762f593c 100644 --- a/NexusClient/data/releasenotes.rtf +++ b/NexusClient/data/releasenotes.rtf @@ -1,12 +1,20 @@ {\rtf1\ansi\ansicpg1252\deff0\nouicompat\deflang2057\deflangfe1041{\fonttbl{\f0\fswiss\fprq2\fcharset0 Verdana;}{\f1\fswiss\fprq2\fcharset0 Calibri;}{\f2\fnil\fcharset2 Symbol;}} {\colortbl ;\red0\green0\blue255;\red0\green0\blue0;\red255\green0\blue0;} {\*\generator Riched20 10.0.16299}{\*\mmathPr\mdispDef1\mwrapIndent1440 }\viewkind4\uc1 -\pard\widctlpar\qj\b\f0\fs16 Version 0.63.18\par +\pard\widctlpar\qj\b\f0\fs16 Version 0.63.19\par \par \pard {\pntext\f0 1.\tab}{\*\pn\pnlvlbody\pnf0\pnindent0\pnstart1\pndec{\pntxta.}} \fi-360\li720\qj\cf1 New Feature:\cf2\b0 In the right-click context menu you can now turn off the update check (and automatic rename) for selected mods.\par +{\pntext\f0 2.\tab}\cf1\b New Feature:\cf2\b0 NMM will now try to automatically setup Fallout 4's ini for modding. (thanks to user \b smaitlx1\b0 on Github)\par +{\pntext\f0 3.\tab}\cf1\b New Feature:\cf2\b0 Users can now disable multiple mods at once. (thanks to user \b Arefu\b0 on Github)\par +{\pntext\f0 4.\tab}\cf3\b Bugfix:\cf2\b0 Remove mod manager column size timer which sometimes results in columns being resized too narrow and not allowing user to expand them. (thanks to user \b smaitlx1\b0 on Github)\par +{\pntext\f0 5.\tab}\cf3\b Bugfix:\cf2\b0 Fixed issue where the UI could become unresponsive while parsing the mod's download date. (thanks to user \b Xebeth\b0 on Github)\par +{\pntext\f0 6.\tab}\cf3\b Bugfix:\cf2\b0 Fixed incorrect trimming of UNC paths. (thanks to user \b Xebeth\b0 on Github)\par +{\pntext\f0 7.\tab}\cf3\b Bugfix:\cf2\b0 Fixed an infinite loop during the startup UAC checks. (thanks to user \b Xebeth\b0 on Github)\par +{\pntext\f0 8.\tab}\cf3\b Bugfix:\cf2\b0 Fixed issue causing the state of the Update Warning and Update Checks toggles to be lost or incorrectly set on newly downloaded mods.\par +{\pntext\f0 9.\tab}\cf3\b Bugfix:\cf2\b0 Removed the codesigned uninstaller since the signature was no longer valid.\par \pard\widctlpar\qj\cf0\b\par \par diff --git a/Setup/PreprocessedNexus Mod Manager0.7.1.1.iss b/Setup/PreprocessedNexus Mod Manager0.7.1.1.iss new file mode 100644 index 000000000..83095999b --- /dev/null +++ b/Setup/PreprocessedNexus Mod Manager0.7.1.1.iss @@ -0,0 +1,635 @@ +; BEGIN ISPPBUILTINS.ISS + + +; END ISPPBUILTINS.ISS + + +;#define use_msi45 + + +[Setup] +AppName=Nexus Mod Manager +AppID=6af12c54-643b-4752-87d0-8335503010de +AppVersion=0.63.19 +AppVerName=Nexus Mod Manager 0.63.19 +AppCopyright=Copyright © Black Tree Gaming 2011-2018 +VersionInfoVersion=0.63.19 +VersionInfoCompany=Black Tree Gaming +AppPublisher=Black Tree Gaming +;AppPublisherURL=http://... +;AppSupportURL=http://... +;AppUpdatesURL=http://... +OutputBaseFilename=Nexus Mod Manager-0.63.19 +DefaultGroupName=Nexus Mod Manager +DefaultDirName={pf}\Nexus Mod Manager +UninstallDisplayName=Nexus Mod Manager +UninstallDisplayIcon={app}\NexusClient.exe,0 +Uninstallable=true +UninstallFilesDir={app}\uninstall +DirExistsWarning=no +DisableDirPage=no +CreateAppDir=true +OutputDir=bin +SourceDir=. +AllowNoIcons=true +SignedUninstaller=false +UsePreviousGroup=true +UsePreviousAppDir=true +LanguageDetectionMethod=uilanguage +InternalCompressLevel=Ultra64 +SolidCompression=true +Compression=lzma2/Max +ChangesAssociations=true +LicenseFile=..\bin\Release\data\Licence.rtf +InfoBeforeFile=..\bin\Release\data\NewVersionDisclaimer.rtf +InfoAfterFile=..\bin\Release\data\releasenotes.rtf +MinVersion=0,6.0 +PrivilegesRequired=admin +ArchitecturesAllowed=x86 x64 ia64 +ArchitecturesInstallIn64BitMode=x64 ia64 +AppMutex=Global\6af12c54-643b-4752-87d0-8335503010de + +[Languages] +Name: "en"; MessagesFile: "compiler:Default.isl" +Name: "de"; MessagesFile: "compiler:Languages\German.isl" + +[Tasks] +Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}" +Name: "quicklaunchicon"; Description: "{cm:CreateQuickLaunchIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked +Name: associateNxmFiles; Description: &Associate *.NXM files with Nexus Mod Manager; GroupDescription: Other tasks:; +Name: associateNxmUrls; Description: Associate NXM: &URLs with Nexus Mod Manager; GroupDescription: Other tasks:; +Name: associateFomodFiles; Description: &Associate *.FOMOD files with Nexus Mod Manager; GroupDescription: Other tasks:; +Name: associateOmodFiles; Description: &Associate *.OMOD files with Nexus Mod Manager; GroupDescription: Other tasks:; + +[Files] +Source: "..\bin\Release\*.exe"; Excludes: "*.vshost.exe"; DestDir: {app}; Flags: ignoreversion +Source: "..\bin\Release\*.config"; Excludes: "*.vshost.exe.config"; DestDir: {app}; Flags: ignoreversion +Source: "..\bin\Release\*.dll"; DestDir: {app}; Flags: ignoreversion +Source: "..\bin\Release\data\*"; DestDir: {app}\data; Flags: ignoreversion recursesubdirs +Source: "..\bin\Release\GameModes\*"; DestDir: {app}\GameModes; Flags: ignoreversion recursesubdirs +Source: "..\bin\Release\ModFormats\*"; DestDir: {app}\ModFormats; Flags: ignoreversion recursesubdirs +Source: "..\bin\Release\ScriptTypes\*"; DestDir: {app}\ScriptTypes; Flags: ignoreversion recursesubdirs + +[Icons] +Name: {group}\Nexus Mod Manager; Filename: {app}\NexusClient.exe; WorkingDir: {app} +Name: {group}\Nexus Mod Manager (Trace Mode); Filename: {app}\NexusClient.exe; Parameters: -trace; WorkingDir: {app} +Name: {group}\{cm:UninstallProgram,Nexus Mod Manager}; Filename: {uninstallexe}; WorkingDir: {app} +Name: {commondesktop}\Nexus Mod Manager; Filename: {app}\NexusClient.exe; Tasks: desktopicon; WorkingDir: {app} +Name: {userappdata}\Microsoft\Internet Explorer\Quick Launch\Nexus Mod Manager; Filename: {app}\NexusClient.exe; Tasks: quicklaunchicon; WorkingDir: {app} + +[Run] +Filename: {app}\NexusClient.exe; Description: {cm:LaunchProgram,Nexus Mod Manager}; Flags: nowait postinstall skipifsilent + +[Registry] +;.nxm +Root: HKCR; Subkey: .nxm; ValueType: string; ValueName: ; ValueData: NXM_File_Type; Flags: uninsdeletekey; Tasks: associateNxmFiles +Root: HKCR; Subkey: NXM_File_Type; ValueType: string; ValueName: ; ValueData: Nexus Mod Manager Mod Archive; Flags: uninsdeletekey; Tasks: associateNxmFiles +Root: HKCR; Subkey: NXM_File_Type\DefaultIcon; ValueType: string; ValueName: ; ValueData: {app}\NexusClient.exe,0; Tasks: associateNxmFiles +Root: HKCR; Subkey: NXM_File_Type\shell\open\command; ValueType: string; ValueName: ; ValueData: """{app}\NexusClient.exe"" ""%1"""; Tasks: associateNxmFiles +;URL support +Root: HKCR; Subkey: nxm; ValueType: string; ValueName: ; ValueData: "URL:Nexus Mod"; Flags: uninsdeletekey; Tasks: associateNxmUrls +Root: HKCR; Subkey: nxm; ValueType: string; ValueName: "URL Protocol"; ValueData: ; Tasks: associateNxmUrls +Root: HKCR; Subkey: nxm\DefaultIcon; ValueType: string; ValueName: ; ValueData: NexusClient.exe; Tasks: associateNxmUrls +Root: HKCR; Subkey: nxm\shell\open\command; ValueType: string; ValueName: ; ValueData: """{app}\NexusClient.exe"" ""%1"""; Tasks: associateNxmUrls +;.fomod +Root: HKCR; Subkey: .fomod; ValueType: string; ValueName: ; ValueData: FOMOD_File_Type; Flags: uninsdeletekey; Tasks: associateFomodFiles +Root: HKCR; Subkey: FOMOD_File_Type; ValueType: string; ValueName: ; ValueData: Fallout Mod Archive; Flags: uninsdeletekey; Tasks: associateFomodFiles +Root: HKCR; Subkey: FOMOD_File_Type\DefaultIcon; ValueType: string; ValueName: ; ValueData: {app}\NexusClient.exe,0; Tasks: associateFomodFiles +Root: HKCR; Subkey: FOMOD_File_Type\shell\open\command; ValueType: string; ValueName: ; ValueData: """{app}\NexusClient.exe"" ""%1"""; Tasks: associateFomodFiles +;.omod +Root: HKCR; Subkey: .omod; ValueType: string; ValueName: ; ValueData: OMOD_File_Type; Flags: uninsdeletekey; Tasks: associateFomodFiles +Root: HKCR; Subkey: OMOD_File_Type; ValueType: string; ValueName: ; ValueData: Oblivion Mod Archive; Flags: uninsdeletekey; Tasks: associateFomodFiles +Root: HKCR; Subkey: OMOD_File_Type\DefaultIcon; ValueType: string; ValueName: ; ValueData: {app}\NexusClient.exe,0; Tasks: associateFomodFiles +Root: HKCR; Subkey: OMOD_File_Type\shell\open\command; ValueType: string; ValueName: ; ValueData: """{app}\NexusClient.exe"" ""%1"""; Tasks: associateFomodFiles + +[Files] +Source: "scripts\isxdl\isxdl.dll"; Flags: dontcopy + +[Code] +procedure isxdl_AddFile(URL, Filename: PAnsiChar); +external 'isxdl_AddFile@files:isxdl.dll stdcall'; + +function isxdl_DownloadFiles(hWnd: Integer): Integer; +external 'isxdl_DownloadFiles@files:isxdl.dll stdcall'; + +function isxdl_SetOption(Option, Value: PAnsiChar): Integer; +external 'isxdl_SetOption@files:isxdl.dll stdcall'; + +[CustomMessages] +DependenciesDir=MyProgramDependencies + +en.depdownload_msg=The following applications are required before setup can continue:%n%n%1%nDownload and install now? +de.depdownload_msg=Die folgenden Programme werden benötigt bevor das Setup fortfahren kann:%n%n%1%nJetzt downloaden und installieren? + +en.depdownload_memo_title=Download dependencies +de.depdownload_memo_title=Abhängigkeiten downloaden + +en.depinstall_memo_title=Install dependencies +de.depinstall_memo_title=Abhängigkeiten installieren + +en.depinstall_title=Installing dependencies +de.depinstall_title=Installiere Abhängigkeiten + +en.depinstall_description=Please wait while Setup installs dependencies on your computer. +de.depinstall_description=Warten Sie bitte während Abhängigkeiten auf Ihrem Computer installiert wird. + +en.depinstall_status=Installing %1... +de.depinstall_status=Installiere %1... + +en.depinstall_missing=%1 must be installed before setup can continue. Please install %1 and run Setup again. +de.depinstall_missing=%1 muss installiert werden bevor das Setup fortfahren kann. Bitte installieren Sie %1 und starten Sie das Setup erneut. + +en.depinstall_error=An error occured while installing the dependencies. Please restart the computer and run the setup again or install the following dependencies manually:%n +de.depinstall_error=Ein Fehler ist während der Installation der Abghängigkeiten aufgetreten. Bitte starten Sie den Computer neu und führen Sie das Setup erneut aus oder installieren Sie die folgenden Abhängigkeiten per Hand:%n + +en.isxdl_langfile= +de.isxdl_langfile=german2.ini + + +[Files] +Source: "scripts\isxdl\german2.ini"; Flags: dontcopy + +[Code] +type + TProduct = record + File: String; + Title: String; + Parameters: String; + InstallClean : boolean; + MustRebootAfter : boolean; + end; + + InstallResult = (InstallSuccessful, InstallRebootRequired, InstallError); + +var + installMemo, downloadMemo, downloadMessage: string; + products: array of TProduct; + delayedReboot: boolean; + DependencyPage: TOutputProgressWizardPage; + + +procedure AddProduct(FileName, Parameters, Title, Size, URL: string; InstallClean : boolean; MustRebootAfter : boolean); +var + path: string; + i: Integer; +begin + installMemo := installMemo + '%1' + Title + #13; + + path := ExpandConstant('{src}{\}') + CustomMessage('DependenciesDir') + '\' + FileName; + if not FileExists(path) then begin + path := ExpandConstant('{tmp}{\}') + FileName; + + isxdl_AddFile(URL, path); + + downloadMemo := downloadMemo + '%1' + Title + #13; + downloadMessage := downloadMessage + ' ' + Title + ' (' + Size + ')' + #13; + end; + + i := GetArrayLength(products); + SetArrayLength(products, i + 1); + products[i].File := path; + products[i].Title := Title; + products[i].Parameters := Parameters; + products[i].InstallClean := InstallClean; + products[i].MustRebootAfter := MustRebootAfter; +end; + +function SmartExec(prod : TProduct; var ResultCode : Integer) : boolean; +begin + if (LowerCase(Copy(prod.File,Length(prod.File)-2,3)) = 'exe') then begin + Result := Exec(prod.File, prod.Parameters, '', SW_SHOWNORMAL, ewWaitUntilTerminated, ResultCode); + end else begin + Result := ShellExec('', prod.File, prod.Parameters, '', SW_SHOWNORMAL, ewWaitUntilTerminated, ResultCode); + end; +end; + +function PendingReboot : boolean; +var names: String; +begin + if (RegQueryMultiStringValue(HKEY_LOCAL_MACHINE, 'SYSTEM\CurrentControlSet\Control\Session Manager', 'PendingFileRenameOperations', names)) then begin + Result := true; + end else if ((RegQueryMultiStringValue(HKEY_LOCAL_MACHINE, 'SYSTEM\CurrentControlSet\Control\Session Manager', 'SetupExecute', names)) and (names <> '')) then begin + Result := true; + end else begin + Result := false; + end; +end; + +function InstallProducts: InstallResult; +var + ResultCode, i, productCount, finishCount: Integer; +begin + Result := InstallSuccessful; + productCount := GetArrayLength(products); + + if productCount > 0 then begin + DependencyPage := CreateOutputProgressPage(CustomMessage('depinstall_title'), CustomMessage('depinstall_description')); + DependencyPage.Show; + + for i := 0 to productCount - 1 do begin + if (products[i].InstallClean and (delayedReboot or PendingReboot())) then begin + Result := InstallRebootRequired; + break; + end; + + DependencyPage.SetText(FmtMessage(CustomMessage('depinstall_status'), [products[i].Title]), ''); + DependencyPage.SetProgress(i, productCount); + + if SmartExec(products[i], ResultCode) then begin + if (products[i].MustRebootAfter) then begin + if (i = productCount - 1) then begin + delayedReboot := true; + end else begin + Result := InstallRebootRequired; + end; + break; + end else if (ResultCode = 0) then begin + finishCount := finishCount + 1; + end else if (ResultCode = 3010) then begin + delayedReboot := true; + finishCount := finishCount + 1; + end else begin + Result := InstallSuccessful; + break; + end; + end else begin + Result := InstallSuccessful; + break; + end; + end; + + for i := 0 to productCount - finishCount - 1 do begin + products[i] := products[i+finishCount]; + end; + SetArrayLength(products, productCount - finishCount); + + DependencyPage.Hide; + end; +end; + +function PrepareToInstall(var NeedsRestart: boolean): String; +var + i: Integer; + s: string; +begin + delayedReboot := false; + + case InstallProducts() of + InstallError: begin + s := CustomMessage('depinstall_error'); + + for i := 0 to GetArrayLength(products) - 1 do begin + s := s + #13 + ' ' + products[i].Title; + end; + + Result := s; + end; + InstallRebootRequired: begin + Result := products[0].Title; + NeedsRestart := true; + + RegWriteStringValue(HKEY_CURRENT_USER, 'SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce', 'InstallBootstrap', ExpandConstant('{srcexe}')); + end; + end; +end; + +function NeedRestart : boolean; +begin + if (delayedReboot) then + Result := true; +end; + +function UpdateReadyMemo(Space, NewLine, MemoUserInfoInfo, MemoDirInfo, MemoTypeInfo, MemoComponentsInfo, MemoGroupInfo, MemoTasksInfo: String): String; +var + s: string; +begin + if downloadMemo <> '' then + s := s + CustomMessage('depdownload_memo_title') + ':' + NewLine + FmtMessage(downloadMemo, [Space]) + NewLine; + if installMemo <> '' then + s := s + CustomMessage('depinstall_memo_title') + ':' + NewLine + FmtMessage(installMemo, [Space]) + NewLine; + + s := s + MemoDirInfo + NewLine + NewLine + MemoGroupInfo + + if MemoTasksInfo <> '' then + s := s + NewLine + NewLine + MemoTasksInfo; + + Result := s +end; + +function NextButtonClick(CurPageID: Integer): boolean; +begin + Result := true; + + if CurPageID = wpReady then begin + if downloadMemo <> '' then begin + if (ActiveLanguage() <> 'en') then begin + ExtractTemporaryFile(CustomMessage('isxdl_langfile')); + isxdl_SetOption('language', ExpandConstant('{tmp}{\}') + CustomMessage('isxdl_langfile')); + end; + + if SuppressibleMsgBox(FmtMessage(CustomMessage('depdownload_msg'), [downloadMessage]), mbConfirmation, MB_YESNO, IDYES) = IDNO then + Result := false + else if isxdl_DownloadFiles(StrToInt(ExpandConstant('{wizardhwnd}'))) = 0 then + Result := false; + end; + end; +end; + +function IsX86: boolean; +begin + Result := (ProcessorArchitecture = paX86) or (ProcessorArchitecture = paUnknown); +end; + +function IsX64: boolean; +begin + Result := Is64BitInstallMode and (ProcessorArchitecture = paX64); +end; + +function IsIA64: boolean; +begin + Result := Is64BitInstallMode and (ProcessorArchitecture = paIA64); +end; + +function GetString(x86, x64, ia64: String): String; +begin + if IsX64() and (x64 <> '') then begin + Result := x64; + end else if IsIA64() and (ia64 <> '') then begin + Result := ia64; + end else begin + Result := x86; + end; +end; + +function GetArchitectureString(): String; +begin + if IsX64() then begin + Result := '_x64'; + end else if IsIA64() then begin + Result := '_ia64'; + end else begin + Result := ''; + end; +end; + +function stringtoversion(var temp: String): Integer; +var + part: String; + pos1: Integer; + +begin + if (Length(temp) = 0) then begin + Result := -1; + Exit; + end; + + pos1 := Pos('.', temp); + if (pos1 = 0) then begin + Result := StrToInt(temp); + temp := ''; + end else begin + part := Copy(temp, 1, pos1 - 1); + temp := Copy(temp, pos1 + 1, Length(temp)); + Result := StrToInt(part); + end; +end; + +function compareinnerversion(var x, y: String): Integer; +var + num1, num2: Integer; + +begin + num1 := stringtoversion(x); + num2 := stringtoversion(y); + if (num1 = -1) or (num2 = -1) then begin + Result := 0; + Exit; + end; + + if (num1 < num2) then begin + Result := -1; + end else if (num1 > num2) then begin + Result := 1; + end else begin + Result := compareinnerversion(x, y); + end; +end; + +function compareversion(versionA, versionB: String): Integer; +var + temp1, temp2: String; + +begin + temp1 := versionA; + temp2 := versionB; + Result := compareinnerversion(temp1, temp2); +end; +[Code] +var + WindowsVersion: TWindowsVersion; + +procedure initwinversion(); +begin + GetWindowsVersionEx(WindowsVersion); +end; + +function exactwinversion(MajorVersion, MinorVersion: integer): boolean; +begin + Result := (WindowsVersion.Major = MajorVersion) and (WindowsVersion.Minor = MinorVersion); +end; + +function minwinversion(MajorVersion, MinorVersion: integer): boolean; +begin + Result := (WindowsVersion.Major > MajorVersion) or ((WindowsVersion.Major = MajorVersion) and (WindowsVersion.Minor >= MinorVersion)); +end; + +function maxwinversion(MajorVersion, MinorVersion: integer): boolean; +begin + Result := (WindowsVersion.Major < MajorVersion) or ((WindowsVersion.Major = MajorVersion) and (WindowsVersion.Minor <= MinorVersion)); +end; + +function exactwinspversion(MajorVersion, MinorVersion, SpVersion: integer): boolean; +begin + if exactwinversion(MajorVersion, MinorVersion) then + Result := WindowsVersion.ServicePackMajor = SpVersion + else + Result := true; +end; + +function minwinspversion(MajorVersion, MinorVersion, SpVersion: integer): boolean; +begin + if exactwinversion(MajorVersion, MinorVersion) then + Result := WindowsVersion.ServicePackMajor >= SpVersion + else + Result := true; +end; + +function maxwinspversion(MajorVersion, MinorVersion, SpVersion: integer): boolean; +begin + if exactwinversion(MajorVersion, MinorVersion) then + Result := WindowsVersion.ServicePackMajor <= SpVersion + else + Result := true; +end; +[Code] +function GetFullVersion(VersionMS, VersionLS: cardinal): string; +var + version: string; +begin + version := IntToStr(word(VersionMS shr 16)); + version := version + '.' + IntToStr(word(VersionMS and not $ffff0000)); + + version := version + '.' + IntToStr(word(VersionLS shr 16)); + version := version + '.' + IntToStr(word(VersionLS and not $ffff0000)); + + Result := version; +end; + +function fileversion(file: string): string; +var + versionMS, versionLS: cardinal; +begin + if GetVersionNumbers(file, versionMS, versionLS) then + Result := GetFullVersion(versionMS, versionLS) + else + Result := '0'; +end; +[Code] +type + NetFXType = (NetFx10, NetFx11, NetFx20, NetFx30, NetFx35, NetFx40Client, NetFx40Full, NetFx45); + +const + netfx11plus_reg = 'Software\Microsoft\NET Framework Setup\NDP\'; + +function netfxinstalled(version: NetFXType; lcid: string): boolean; +var + regVersion: cardinal; + regVersionString: string; +begin + if (lcid <> '') then + lcid := '\' + lcid; + + if (version = NetFx10) then begin + RegQueryStringValue(HKLM, 'Software\Microsoft\.NETFramework\Policy\v1.0\3705', 'Install', regVersionString); + Result := regVersionString <> ''; + end else begin + case version of + NetFx11: + RegQueryDWordValue(HKLM, netfx11plus_reg + 'v1.1.4322' + lcid, 'Install', regVersion); + NetFx20: + RegQueryDWordValue(HKLM, netfx11plus_reg + 'v2.0.50727' + lcid, 'Install', regVersion); + NetFx30: + RegQueryDWordValue(HKLM, netfx11plus_reg + 'v3.0\Setup' + lcid, 'InstallSuccess', regVersion); + NetFx35: + RegQueryDWordValue(HKLM, netfx11plus_reg + 'v3.5' + lcid, 'Install', regVersion); + NetFx40Client: + RegQueryDWordValue(HKLM, netfx11plus_reg + 'v4\Client' + lcid, 'Install', regVersion); + NetFx40Full: + RegQueryDWordValue(HKLM, netfx11plus_reg + 'v4\Full' + lcid, 'Install', regVersion); + NetFx45: + begin + RegQueryDWordValue(HKLM, netfx11plus_reg + 'v4\Full' + lcid, 'Release', regVersion); + Result := (regVersion >= 378389) and (regVersion <= 393295); + Exit; + end; + end; + Result := (regVersion <> 0); + end; +end; + +function netfxspversion(version: NetFXType; lcid: string): integer; +var + regVersion: cardinal; +begin + if (lcid <> '') then + lcid := '\' + lcid; + + case version of + NetFx10: + regVersion := -1; + NetFx11: + if (not RegQueryDWordValue(HKLM, netfx11plus_reg + 'v1.1.4322' + lcid, 'SP', regVersion)) then + regVersion := -1; + NetFx20: + if (not RegQueryDWordValue(HKLM, netfx11plus_reg + 'v2.0.50727' + lcid, 'SP', regVersion)) then + regVersion := -1; + NetFx30: + if (not RegQueryDWordValue(HKLM, netfx11plus_reg + 'v3.0' + lcid, 'SP', regVersion)) then + regVersion := -1; + NetFx35: + if (not RegQueryDWordValue(HKLM, netfx11plus_reg + 'v3.5' + lcid, 'SP', regVersion)) then + regVersion := -1; + NetFx40Client: + if (not RegQueryDWordValue(HKLM, netfx11plus_reg + 'v4\Client' + lcid, 'Servicing', regVersion)) then + regVersion := -1; + NetFx40Full: + if (not RegQueryDWordValue(HKLM, netfx11plus_reg + 'v4\Full' + lcid, 'Servicing', regVersion)) then + regVersion := -1; + NetFx45: + if (RegQueryDWordValue(HKLM, netfx11plus_reg + 'v4\Full' + lcid, 'Release', regVersion)) then begin + if (regVersion = 379893) or (regVersion = 393295) then + regVersion := 2 // 4.5.2 + else if (regVersion = 378675) or (regVersion = 378758) then + regVersion := 1 // 4.5.1 + else if (regVersion = 378389) then + regVersion := 0 // 4.5.0 + else + regVersion := -1; + end; + end; + Result := regVersion; +end; + +[CustomMessages] +msi31_title=Windows Installer 3.1 + +en.msi31_size=2.5 MB +de.msi31_size=2,5 MB + + +[Code] +const + msi31_url = 'http://download.microsoft.com/download/1/4/7/147ded26-931c-4daf-9095-ec7baf996f46/WindowsInstaller-KB893803-v2-x86.exe'; + +procedure msi31(MinVersion: string); +begin + if (IsX86() and minwinversion(5, 0) and (compareversion(fileversion(ExpandConstant('{sys}{\}msi.dll')), MinVersion) < 0)) then + AddProduct('msi31.exe', + '/passive /norestart', + CustomMessage('msi31_title'), + CustomMessage('msi31_size'), + msi31_url, + false, false); +end; + + +[CustomMessages] +dotnetfx45_title=.NET Framework 4.5.2 + +dotnetfx45_size=1 MB - 68 MB + +;http://www.microsoft.com/globaldev/reference/lcid-all.mspx +en.dotnetfx45_lcid='' +de.dotnetfx45_lcid='/lcid 1031 ' + + +[Code] +const + dotnetfx45_url = 'http://download.microsoft.com/download/B/4/1/B4119C11-0423-477B-80EE-7A474314B347/NDP452-KB2901954-Web.exe'; + +procedure dotnetfx45(MinVersion: integer); +begin + if (not netfxinstalled(NetFx45, '') or (netfxspversion(NetFx45, '') < MinVersion)) then + AddProduct('dotnetfx45.exe', + CustomMessage('dotnetfx45_lcid') + '/q /passive /norestart', + CustomMessage('dotnetfx45_title'), + CustomMessage('dotnetfx45_size'), + dotnetfx45_url, + false, false); +end; + +[CustomMessages] +win2000sp3_title=Windows 2000 Service Pack 3 +winxpsp2_title=Windows XP Service Pack 2 +winxpsp3_title=Windows XP Service Pack 3 + diff --git a/Setup/setup.iss b/Setup/setup.iss index d50e5ac7e..c4b7ccf63 100644 --- a/Setup/setup.iss +++ b/Setup/setup.iss @@ -8,15 +8,15 @@ #define MyAppSetupName 'Nexus Mod Manager' #define MyExeName 'NexusClient.exe' -#define MyAppVersion '0.63.18' -#define SetupScriptVersion '0.7.1.0' +#define MyAppVersion '0.63.19' +#define SetupScriptVersion '0.7.1.1' #define MyPublisher 'Black Tree Gaming' [Setup] AppName={#MyAppSetupName} AppID=6af12c54-643b-4752-87d0-8335503010de AppVersion={#MyAppVersion} AppVerName={#MyAppSetupName} {#MyAppVersion} -AppCopyright=Copyright © {#MyPublisher} 2011-2017 +AppCopyright=Copyright © {#MyPublisher} 2011-2018 VersionInfoVersion={#MyAppVersion} VersionInfoCompany={#MyPublisher} AppPublisher={#MyPublisher} @@ -36,7 +36,7 @@ CreateAppDir=true OutputDir=bin SourceDir=. AllowNoIcons=true -SignedUninstaller=true +SignedUninstaller=false UsePreviousGroup=true UsePreviousAppDir=true LanguageDetectionMethod=uilanguage