From 74d47b5a4f918eb1a4a1342661efe9fb9abf0789 Mon Sep 17 00:00:00 2001 From: Holger Pandel Date: Fri, 10 Jun 2016 16:56:35 +0200 Subject: [PATCH] Resolved issue #505. New installer script based on Inno Setup 5. --HG-- branch : feature --- ChangeLog.txt | 1 + dist/win/inno/LICENSE_VALENTINA | 17 ++ dist/win/inno/valentina.iss | 336 ++++++++++++++++++++++++++ dist/win/nsis/headers/fileassoc.nsh | 152 ------------ dist/win/nsis/headers/fileversion.nsh | 30 --- dist/win/nsis/unList.exe | Bin 48532 -> 0 bytes dist/win/nsis/unList.nsi | 220 ----------------- dist/win/nsis/valentina.nsi | 282 --------------------- src/app/valentina/valentina.pro | 26 +- 9 files changed, 364 insertions(+), 700 deletions(-) create mode 100644 dist/win/inno/LICENSE_VALENTINA create mode 100644 dist/win/inno/valentina.iss delete mode 100644 dist/win/nsis/headers/fileassoc.nsh delete mode 100644 dist/win/nsis/headers/fileversion.nsh delete mode 100644 dist/win/nsis/unList.exe delete mode 100644 dist/win/nsis/unList.nsi delete mode 100644 dist/win/nsis/valentina.nsi diff --git a/ChangeLog.txt b/ChangeLog.txt index e02ad958c..5264a8e92 100644 --- a/ChangeLog.txt +++ b/ChangeLog.txt @@ -1,4 +1,5 @@ # Version 0.5.0 +- [#505] New installer script based on Inno Setup 5. - [#508] Settings saved to INI files in different folders. - [#193] Undeletable zombie arc objects. - New feature. Groups. diff --git a/dist/win/inno/LICENSE_VALENTINA b/dist/win/inno/LICENSE_VALENTINA new file mode 100644 index 000000000..f12c71eb9 --- /dev/null +++ b/dist/win/inno/LICENSE_VALENTINA @@ -0,0 +1,17 @@ +LICENSING +========== +Valentina is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +Valentina is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +See LICENSE_GPL.txt file for further information + +Other components released under: +* QMuParser - BSD license +* VPropertyExplorer - LGPLv2.1 license \ No newline at end of file diff --git a/dist/win/inno/valentina.iss b/dist/win/inno/valentina.iss new file mode 100644 index 000000000..aa4b936e6 --- /dev/null +++ b/dist/win/inno/valentina.iss @@ -0,0 +1,336 @@ +; Script generated by the Inno Script Studio Wizard. +; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES! + +#define MyAppName "Valentina" +#define MyAppVersion GetFileVersion('valentina\valentina.exe') +#define MyAppPublisher "Roman Telezhynskyi" +#define MyAppURL "http://www.valentina-project.org/" +#define MyAppExeName "valentina.exe" +#define MyAppCopyright "(C) 2013-2015 Valentina project" +#define MyDateTimeString GetDateTimeString('yyyymmddhhnnss', '', ''); +; Appstatus: "" = release, "b" = beta, "a" = alpha +; this only modifies the resulting exe name of the installer package ;-) +#define MyAppStatus "a" + +[Setup] +; NOTE: The value of AppId uniquely identifies this application. +; Do not use the same AppId value in installers for other applications. +; (To generate a new GUID, click Tools | Generate GUID inside the IDE.) +AppId={{7081AEC7-38FC-479F-B712-DB073BB76512} +AppName={#MyAppName} +AppVersion={#MyAppVersion} +AppVerName={#MyAppName} {#MyAppVersion} +;AppVerName={#MyAppName} {#MyAppVersion} +AppPublisher={#MyAppPublisher} +AppPublisherURL={#MyAppURL} +AppSupportURL={#MyAppURL} +AppUpdatesURL={#MyAppURL} +DefaultDirName={pf}\{#MyAppName} +DefaultGroupName={#MyAppName} +LicenseFile=.\LICENSE_VALENTINA +InfoAfterFile=.\valentina\README.txt +OutputDir=.\ +OutputBaseFilename=valentina_{#MyAppVersion}{#MyAppStatus}-{#MyDateTimeString} +SetupIconFile=.\valentina\valentina.ico +Compression=lzma +SolidCompression=yes +VersionInfoVersion={#MyAppVersion} +ShowLanguageDialog=auto +VersionInfoProductName=Valentina +AppCopyright={#MyAppCopyright} +ChangesAssociations=yes + +[Languages] +Name: "english"; MessagesFile: "compiler:Default.isl" +Name: "armenian"; MessagesFile: "compiler:Languages\Armenian.islu" +Name: "brazilianportuguese"; MessagesFile: "compiler:Languages\BrazilianPortuguese.isl" +Name: "catalan"; MessagesFile: "compiler:Languages\Catalan.isl" +Name: "corsican"; MessagesFile: "compiler:Languages\Corsican.isl" +Name: "czech"; MessagesFile: "compiler:Languages\Czech.isl" +Name: "danish"; MessagesFile: "compiler:Languages\Danish.isl" +Name: "dutch"; MessagesFile: "compiler:Languages\Dutch.isl" +Name: "finnish"; MessagesFile: "compiler:Languages\Finnish.isl" +Name: "french"; MessagesFile: "compiler:Languages\French.isl" +Name: "german"; MessagesFile: "compiler:Languages\German.isl" +Name: "greek"; MessagesFile: "compiler:Languages\Greek.isl" +Name: "hebrew"; MessagesFile: "compiler:Languages\Hebrew.isl" +Name: "hungarian"; MessagesFile: "compiler:Languages\Hungarian.isl" +Name: "italian"; MessagesFile: "compiler:Languages\Italian.isl" +Name: "japanese"; MessagesFile: "compiler:Languages\Japanese.isl" +Name: "nepali"; MessagesFile: "compiler:Languages\Nepali.islu" +Name: "norwegian"; MessagesFile: "compiler:Languages\Norwegian.isl" +Name: "polish"; MessagesFile: "compiler:Languages\Polish.isl" +Name: "portuguese"; MessagesFile: "compiler:Languages\Portuguese.isl" +Name: "russian"; MessagesFile: "compiler:Languages\Russian.isl" +Name: "scottishgaelic"; MessagesFile: "compiler:Languages\ScottishGaelic.isl" +Name: "serbiancyrillic"; MessagesFile: "compiler:Languages\SerbianCyrillic.isl" +Name: "serbianlatin"; MessagesFile: "compiler:Languages\SerbianLatin.isl" +Name: "slovenian"; MessagesFile: "compiler:Languages\Slovenian.isl" +Name: "spanish"; MessagesFile: "compiler:Languages\Spanish.isl" +Name: "turkish"; MessagesFile: "compiler:Languages\Turkish.isl" +Name: "ukrainian"; MessagesFile: "compiler:Languages\Ukrainian.isl" + +[Tasks] +Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked +Name: "quicklaunchicon"; Description: "{cm:CreateQuickLaunchIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked; OnlyBelowVersion: 0,6.1 +Name: "fileassoc1"; Description: "{cm:CreateFileAssocVal}"; GroupDescription: "{cm:FileAssoc}" +Name: "fileassoc2"; Description: "{cm:CreateFileAssocVit}"; GroupDescription: "{cm:FileAssoc}" +Name: "fileassoc3"; Description: "{cm:CreateFileAssocVst}"; GroupDescription: "{cm:FileAssoc}" + +[Files] +Source: ".\valentina\valentina.exe"; DestDir: "{app}"; Flags: ignoreversion +Source: ".\valentina\tape.exe"; DestDir: "{app}"; Flags: ignoreversion +Source: ".\valentina\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs +; NOTE: Don't use "Flags: ignoreversion" on any shared system files +; DLL used to check if the target program is running at install time + +[Icons] +Name: "{group}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}" +Name: "{group}\{cm:UninstallProgram,{#MyAppName}}"; Filename: "{uninstallexe}" +Name: "{group}\Tape"; Filename: "{app}\tape.exe" +Name: "{commondesktop}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; Tasks: desktopicon +Name: "{commondesktop}\Tape"; Filename: "{app}\tape.exe"; Tasks: desktopicon +Name: "{userappdata}\Microsoft\Internet Explorer\Quick Launch\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; Tasks: quicklaunchicon + +[Run] +Filename: "{app}\{#MyAppExeName}"; Description: "{cm:LaunchProgram,{#StringChange(MyAppName, '&', '&&')}}"; Flags: nowait postinstall skipifsilent + +[Registry] +Root: "HKCR"; Subkey: ".val"; ValueType: string; ValueName: ""; ValueData: "Valentina.Pattern"; Flags: uninsdeletevalue; Tasks: fileassoc1 +Root: "HKCR"; Subkey: ".vit"; ValueType: string; ValueName: ""; ValueData: "Valentina.IndividualMeasurements"; Flags: uninsdeletevalue; Tasks: fileassoc2 +Root: "HKCR"; Subkey: ".vst"; ValueType: string; ValueName: ""; ValueData: "Valentina.StandardMeasurements"; Flags: uninsdeletevalue; Tasks: fileassoc3 + +Root: "HKCR"; Subkey: "Valentina.Pattern"; ValueType: string; ValueData: "Valentina pattern file"; Flags: uninsdeletekey; Tasks: fileassoc1 +Root: "HKCR"; Subkey: "Valentina.Pattern\DefaultIcon"; ValueType: string; ValueData: "{app}\valentina.ico,0"; Tasks: fileassoc1 +Root: "HKCR"; Subkey: "Valentina.Pattern\shell\open\command"; ValueType: string; ValueData: """{app}\valentina.exe"" ""%1"""; Tasks: fileassoc1 + +Root: "HKCR"; Subkey: "Valentina.IndividualMeasurements"; ValueType: string; ValueData: "Valentina individual measurement file"; Flags: uninsdeletekey; Tasks: fileassoc2 +Root: "HKCR"; Subkey: "Valentina.IndividualMeasurements\DefaultIcon"; ValueType: string; ValueData: "{app}\i-measurements.ico,0"; Tasks: fileassoc2 +Root: "HKCR"; Subkey: "Valentina.IndividualMeasurements\shell\open\command"; ValueType: string; ValueData: """{app}\tape.exe"" ""%1"""; Tasks: fileassoc2 + +Root: "HKCR"; Subkey: "Valentina.StandardMeasurements"; ValueType: string; ValueData: "Valentina standard measurement file"; Flags: uninsdeletekey; Tasks: fileassoc3 +Root: "HKCR"; Subkey: "Valentina.StandardMeasurements\DefaultIcon"; ValueType: string; ValueData: "{app}\s-measurements.ico,0"; Tasks: fileassoc3 +Root: "HKCR"; Subkey: "Valentina.StandardMeasurements\shell\open\command"; ValueType: string; ValueData: """{app}\tape.exe"" ""%1"""; Tasks: fileassoc3 + +[CustomMessages] +FileAssoc=Create file associations +CreateFileAssocVal=*.val (Pattern file) +CreateFileAssocVit=*.vit (Individual measurement file) +CreateFileAssocVst=*.vst (Standard measurement file) +WarnRemoveOld= is installed at the moment. Remove old version? +WarnSameVersionExit= is already installed. This installer will exit. +WarnRunningOnUnInstall1= is currently running. +WarnRunningOnUnInstall2=Please close it and then click on ''Retry'' to proceed. +WarnCancelInstall=The installation was canceled. +WarnCancelUninstall=The uninstallation process was canceled. +WarnOverwrite= is already installed. Overwrite existing installation? +SetupIsRunningWarning = Valentina setup is already running! +DeinstIsRunningWarning = Valentina uninstall is already running! + +[Code] +const + +// Executable names to check before any setup/uninstall operation + ProgramName1 = 'Valentina'; + ProgramExeName1 = 'valentina.exe'; + ProgramName2 = 'Tape'; + ProgramExeName2 = 'tape.exe'; + +///////////////////////////////////////////////////////////////////// +// Convert version strings into float and compare +// easier than string comparison + +function CompareVersion(str1, str2: String): Integer; +var + temp1, temp2: String; + num1, num2 : Variant; +begin + temp1 := str1; + temp2 := str2; + StringChangeEx(temp1, '.', '', True); + StringChangeEx(temp2, '.', '', True); + num1 := 100*StrToFloat(temp1); + num2 := 100*StrToFloat(temp2); + Result := num1 - num2 +end; + +// Global variables/constants and general functions +const installer_mutex_name = '{#MyAppName}' + '_setup_mutex'; +const uninstaller_mutex_name = '{#MyAppName}' + '_uninstall_mutex'; + +///////////////////////////////////////////////////////////////////// +// Find application by name in current process list +// -> AppName: Name of running exe file +// <- True if the program found, False if not + +function FindApp(const AppName: String): Boolean; +var + WMIService: Variant; + WbemLocator: Variant; + WbemObjectSet: Variant; +begin + WbemLocator := CreateOleObject('WbemScripting.SWbemLocator'); + WMIService := WbemLocator.ConnectServer('localhost', 'root\CIMV2'); + WbemObjectSet := WMIService.ExecQuery('SELECT * FROM Win32_Process Where Name="' + AppName + '"'); + if not VarIsNull(WbemObjectSet) and (WbemObjectSet.Count > 0) then + begin + Result := True; + end + else begin + Result := False; + end; +end; + +///////////////////////////////////////////////////////////////////// +// Prompt the user to close a program that's still running. +// Finish when the executable is closed or the user cancels the process. + +// -> ProgramExeName: Name of executable +// -> Message : User message to prompt to close +// <- True if the program was closed (or was not running), +// False if the user clicked on the Cancel button and didn't close the program + +function PromptUntilProgramClosedOrInstallationCanceled( + ProgramExeName: String; + Message: String ): Boolean; +var + ButtonPressed : Integer; +begin + ButtonPressed := IDRETRY; + + // Check if the program is running or if the user has pressed the cancel button + while FindApp( ProgramExeName ) and ( ButtonPressed <> IDCANCEL ) do + begin + ButtonPressed := MsgBox( message , mbError, MB_RETRYCANCEL ); + end; + + // Has the program been closed? + Result := Not FindApp( ProgramExeName ); +end; + + +///////////////////////////////////////////////////////////////////// +// Version comparison on installation + +function VersionCompareAndUninstall(): Boolean; +var + oldVersion: String; + uninstaller: String; + ErrorCode: Integer; + tmpId : String; +begin + tmpId := '{#emit SetupSetting("AppId")}'; + Delete(tmpId,1,1); + if RegKeyExists(HKEY_LOCAL_MACHINE, + 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\' + tmpId + '_is1') then + begin + RegQueryStringValue(HKEY_LOCAL_MACHINE, + 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\' + tmpId + '_is1', + 'DisplayVersion', oldVersion); + if (CompareVersion(oldVersion, '{#emit SetupSetting("AppVersion")}') < 0) then + begin + if MsgBox('Version ' + oldVersion + ExpandConstant('{cm:WarnRemoveOld}'), + mbConfirmation, MB_YESNO) = IDNO then + begin + Result := False; + end + else + begin + RegQueryStringValue(HKEY_LOCAL_MACHINE,'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\' + tmpId + '_is1','UninstallString', uninstaller); + If ShellExec('', uninstaller, '/SILENT', '', SW_SHOW, ewWaitUntilTerminated, ErrorCode) then + begin + // handle success if necessary; ResultCode contains the exit code + Result := True + end + else begin + // handle failure if necessary; ResultCode contains the error code + Result := False + end + end; + end + else + begin + //MsgBox('Version ' + oldVersion + ExpandConstant('{cm:WarnSameVersionExit}'),mbInformation, MB_OK); + if MsgBox('Version ' + oldVersion + ExpandConstant('{cm:WarnOverwrite}'), + mbConfirmation, MB_YESNO) = IDNO then + Result := False + else + Result := True; + end; + end + else + begin + Result := True; + end; +end; + +///////////////////////////////////////////////////////////////////// +// Run on setup + +function InitializeSetup(): Boolean; +var + // User messages + ProgramRunningOnInstallMessage : String; + InstallationCanceledMessage : String; + + begin + // Create a mutex for the installer and if it's already running then show a message and stop installation + if CheckForMutexes(installer_mutex_name) then begin + SuppressibleMsgBox(ExpandConstant('{cm:SetupIsRunningWarning}'), mbError, MB_OK, MB_OK); + Result := False; + end + else begin + Result := True; + CreateMutex(installer_mutex_name); + + ProgramRunningOnInstallMessage := ExpandConstant('{cm:WarnRunningOnUnInstall1}') + #13 + #13 + ExpandConstant('{cm:WarnRunningOnUnInstall2}'); + InstallationCanceledMessage := ExpandConstant('{cm:WarnCancelInstall}'); + + Result := PromptUntilProgramClosedOrInstallationCanceled( ProgramExeName1, ProgramName1 + ProgramRunningOnInstallMessage) + If Result Then + begin + Result := PromptUntilProgramClosedOrInstallationCanceled( ProgramExeName2, ProgramName2 + ProgramRunningOnInstallMessage) + end; + + if Not Result then + begin + MsgBox( InstallationCanceledMessage, mbInformation, MB_OK ); + end else begin + Result := VersionCompareAndUninstall + end; + end; +end; + +///////////////////////////////////////////////////////////////////// +// Run on uninstall + +function InitializeUninstall(): Boolean; +var + // User message + ProgramRunningOnUninstallMessage : String; + UninstallationCanceledMessage : String; + + begin + if CheckForMutexes(uninstaller_mutex_name) then begin + SuppressibleMsgBox(ExpandConstant('{cm:DeinstIsRunningWarning}'), mbError, MB_OK, MB_OK); + Result := False; + end else + begin + Result := True; + CreateMutex(uninstaller_mutex_name); + + ProgramRunningOnUninstallMessage := ExpandConstant('{cm:WarnRunningOnUnInstall1}') + #13 + #13 + ExpandConstant('{cm:WarnRunningOnUnInstall2}'); + UninstallationCanceledMessage := ExpandConstant('{cm:WarnCancelUninstall}'); + + Result := PromptUntilProgramClosedOrInstallationCanceled( ProgramExeName1, ProgramName1 + ProgramRunningOnUninstallMessage); + If Result Then + begin + Result := PromptUntilProgramClosedOrInstallationCanceled( ProgramExeName2, ProgramName2 + ProgramRunningOnUninstallMessage); + end; + + if not Result then + begin + MsgBox( UninstallationCanceledMessage, mbInformation, MB_OK ); + end; + end; +end; diff --git a/dist/win/nsis/headers/fileassoc.nsh b/dist/win/nsis/headers/fileassoc.nsh deleted file mode 100644 index 399ec7915..000000000 --- a/dist/win/nsis/headers/fileassoc.nsh +++ /dev/null @@ -1,152 +0,0 @@ -; fileassoc.nsh -; File association helper macros -; Written by Saivert -; Adaptation for Windows Vista and higher by Roman Telezhynskyi -; -; Features automatic backup system and UPDATEFILEASSOC macro for -; shell change notification. -; -; |> How to use <| -; To associate a file with an application so you can double-click it in explorer, use -; the APP_ASSOCIATE macro like this: -; -; Example: -; !insertmacro APP_ASSOCIATE "txt" "myapp.textfile" "text/plain" \ -; "Description of txt files" "$INSTDIR\myapp.exe,0" "Open with myapp" \ -; "$INSTDIR\myapp.exe $\"%1$\"" -; -; Never insert the APP_ASSOCIATE macro multiple times, it is only ment -; to associate an application with a single file and using the -; the "open" verb as default. To add more verbs (actions) to a file -; use the APP_ASSOCIATE_ADDVERB macro. -; -; Example: -; !insertmacro APP_ASSOCIATE_ADDVERB "myapp.textfile" "edit" "text/plain" \ -; "Edit with myapp" "$INSTDIR\myapp.exe /edit $\"%1$\"" -; -; To have access to more options when registering the file association use the -; APP_ASSOCIATE_EX macro. Here you can specify the verb and what verb is to be the -; standard action (default verb). -; -; And finally: To remove the association from the registry use the APP_UNASSOCIATE -; macro. Here is another example just to wrap it up: -; !insertmacro APP_UNASSOCIATE "txt" "myapp.textfile" -; -; |> Note <| -; When defining your file class string always use the short form of your application title -; then a period (dot) and the type of file. This keeps the file class sort of unique. -; Examples: -; Winamp.File -; Winamp.Playlist -; NSIS.Script -; Photoshop.JPEGFile -; -; |> Tech info <| -; The registry key layout for a file association is: -;HKEY_LOCAL_MACHINE -; Software -; Classes -; .mp3 -; (default)=Winamp.File -; Winamp.File -; (default)=Winamp Media File -; DefaultIcon -; (default)=c:\program files\winamp\winamp.exe,1 -; shell -; Play=&Play in Winamp -; command -; (default)="c:\program files\winamp\winamp.exe" "%1$" -; Open -; command -; (default)="c:\program files\winamp\winamp.exe" "%1$" -; ListBookmark -; (default)=Add to Winamp's &Bookmark list -; command -; (default)="c:\program files\winamp\winamp.exe"/BOOKMARK "%1$" -; Enqueue -; (default)=&Enqueue in Winamp -; command -; (default)="c:\program files\winamp\winamp.exe$"/ADD "%1$" - -!macro APP_ASSOCIATE EXT FILECLASS MIME DESCRIPTION ICON COMMANDTEXT COMMAND - ; Backup the previously associated file class - ReadRegStr $R0 HKCU "Software\Classes\.${EXT}" "" - WriteRegStr HKCU "Software\Classes\.${EXT}" "${FILECLASS}_backup" "$R0" - - WriteRegStr HKCU "Software\Classes\.${EXT}" "" "${FILECLASS}" - WriteRegStr HKCU "Software\Classes\.${EXT}" "Content Type" "${MIME}" - WriteRegStr HKCU "Software\Classes\.${EXT}\OpenWithProgIds" "${FILECLASS}" "" - - WriteRegStr HKCU "Software\Classes\${FILECLASS}" "" "${DESCRIPTION}" - WriteRegStr HKCU "Software\Classes\${FILECLASS}\DefaultIcon" "" "${ICON}" - WriteRegStr HKCU "Software\Classes\${FILECLASS}\shell" "" "open" - WriteRegStr HKCU "Software\Classes\${FILECLASS}\shell\open" "" "${COMMANDTEXT}" - WriteRegStr HKCU "Software\Classes\${FILECLASS}\shell\open\command" "" "${COMMAND}" - ; Set application by default for current user (since Windows Vista) - ; Backup the previously choice - ReadRegStr $R0 HKCU "Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.${EXT}\UserChoice" "" - WriteRegStr HKCU "Software\Classes\.${EXT}" "UserChoice_backup" "$R0" - - DeleteRegKey HKCU "Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.${EXT}\UserChoice" - WriteRegStr HKCU "Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.${EXT}\UserChoice" "Progid" "${FILECLASS}" -!macroend - -!macro APP_ASSOCIATE_EX EXT FILECLASS MIME DESCRIPTION ICON VERB DEFAULTVERB SHELLNEW COMMANDTEXT COMMAND - ; Backup the previously associated file class - ReadRegStr $R0 HKCU "Software\Classes\.${EXT}" "" - WriteRegStr HKCU "Software\Classes\.${EXT}" "${FILECLASS}_backup" "$R0" - - WriteRegStr HKCU "Software\Classes\.${EXT}" "" "${FILECLASS}" - WriteRegStr HKCU "Software\Classes\.${EXT}" "Content Type" "${MIME}" - WriteRegStr HKCU "Software\Classes\.${EXT}\OpenWithProgIds" "${FILECLASS}" "" - StrCmp "${SHELLNEW}" "0" +2 - WriteRegStr HKCU "Software\Classes\.${EXT}\ShellNew" "NullFile" "" - - WriteRegStr HKCU "Software\Classes\${FILECLASS}" "" "${DESCRIPTION}" - WriteRegStr HKCU "Software\Classes\${FILECLASS}\DefaultIcon" "" "${ICON}" - WriteRegStr HKCU "Software\Classes\${FILECLASS}\shell" "" "${DEFAULTVERB}" - WriteRegStr HKCU "Software\Classes\${FILECLASS}\shell\${VERB}" "" "${COMMANDTEXT}" - WriteRegStr HKCU "Software\Classes\${FILECLASS}\shell\${VERB}\command" "" "${COMMAND}" -!macroend - -!macro APP_ASSOCIATE_ADDVERB FILECLASS VERB COMMANDTEXT COMMAND - WriteRegStr HKCU "Software\Classes\${FILECLASS}\shell\${VERB}" "" "${COMMANDTEXT}" - WriteRegStr HKCU "Software\Classes\${FILECLASS}\shell\${VERB}\command" "" "${COMMAND}" -!macroend - -!macro APP_ASSOCIATE_REMOVEVERB FILECLASS VERB - DeleteRegKey HKCR "Software\Classes\${FILECLASS}\shell\${VERB}" -!macroend - -!macro APP_UNASSOCIATE EXT FILECLASS - ; Backup the previously associated file class - ReadRegStr $R0 HKCU "Software\Classes\.${EXT}" "${FILECLASS}_backup" - WriteRegStr HKCU "Software\Classes\.${EXT}" "" "$R0" - DeleteRegValue HKCU "Software\Classes\.${EXT}" "${FILECLASS}_backup" - DeleteRegKey HKCU "Software\Classes\${FILECLASS}" - - ; Backup application by default for current user - ReadRegStr $R0 HKCU "Software\Classes\.${EXT}" "UserChoice_backup" - DeleteRegKey HKCU "Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.${EXT}\UserChoice" - WriteRegStr HKCU "Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.${EXT}\UserChoice" "Progid" "$R0" - DeleteRegValue HKCU "Software\Classes\.${EXT}" "UserChoice_backup" -!macroend - - -; !defines for use with SHChangeNotify -!ifdef SHCNE_ASSOCCHANGED -!undef SHCNE_ASSOCCHANGED -!endif -!define SHCNE_ASSOCCHANGED 0x08000000 -!ifdef SHCNF_FLUSH -!undef SHCNF_FLUSH -!endif -!define SHCNF_FLUSH 0x1000 - -!macro UPDATEFILEASSOC -; Using the system.dll plugin to call the SHChangeNotify Win32 API function so we -; can update the shell. - System::Call "shell32::SHChangeNotify(i,i,i,i) (${SHCNE_ASSOCCHANGED}, ${SHCNF_FLUSH}, 0, 0)" -!macroend - -;EOF diff --git a/dist/win/nsis/headers/fileversion.nsh b/dist/win/nsis/headers/fileversion.nsh deleted file mode 100644 index 258e0d64d..000000000 --- a/dist/win/nsis/headers/fileversion.nsh +++ /dev/null @@ -1,30 +0,0 @@ -; fileversion.nsh -; Source http://nsis.sourceforge.net/GetDLLVersionLocal_as_define -; -; GetDLLVersionLocal only gives you two packed 32bit numbers, but -; sometimes you might need the unpacked numbers at compile time. This is -; where this ugly thing comes in. -; -; Example usage -; !insertmacro GetPEVersionLocal "$%windir%\system32\kernel32.dll" myver -; Outfile "$%temp%\hello ${myver_1}.${myver_2}.${myver_3}.${myver_4}.exe" - -!macro GetPEVersionLocal file defbase -!verbose push -!verbose 2 -!tempfile GetPEVersionLocal_nsi -!tempfile GetPEVersionLocal_exe -!define GetPEVersionLocal_doll "$" -!appendfile "${GetPEVersionLocal_nsi}" 'SilentInstall silent$\nRequestExecutionLevel user$\nOutFile "${GetPEVersionLocal_exe}"$\nPage instfiles$\nSection' -!appendfile "${GetPEVersionLocal_nsi}" '$\nFileOpen $0 "${GetPEVersionLocal_nsi}" w$\nGetDllVersion "${file}" $R0 $R1$\nIntOp $R2 $R0 / 0x00010000$\nIntOp $R3 $R0 & 0x0000FFFF$\nIntOp $R4 $R1 / 0x00010000$\nIntOp $R5 $R1 & 0x0000FFFF' -!appendfile "${GetPEVersionLocal_nsi}" '$\nFileWrite $0 "!define ${defbase}_1 $R2${GetPEVersionLocal_doll}\n"$\nFileWrite $0 "!define ${defbase}_2 $R3${GetPEVersionLocal_doll}\n"$\nFileWrite $0 "!define ${defbase}_3 $R4${GetPEVersionLocal_doll}\n"$\nFileWrite $0 "!define ${defbase}_4 $R5${GetPEVersionLocal_doll}\n"$\nFileClose $0$\nSectionEnd' -!system '"${NSISDIR}\makensis" /V2 "${GetPEVersionLocal_nsi}"' = 0 -!system '"${GetPEVersionLocal_exe}"' = 0 -!include "${GetPEVersionLocal_nsi}" -!delfile "${GetPEVersionLocal_nsi}" -!delfile "${GetPEVersionLocal_exe}" -!undef GetPEVersionLocal_nsi -!undef GetPEVersionLocal_exe -!undef GetPEVersionLocal_doll -!verbose pop -!macroend diff --git a/dist/win/nsis/unList.exe b/dist/win/nsis/unList.exe deleted file mode 100644 index 816c8366439f74196ec87df4ed9a228fb2274366..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 48532 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 R(NB_Zx%F>3fxL)_{{_!9l?wm> diff --git a/dist/win/nsis/unList.nsi b/dist/win/nsis/unList.nsi deleted file mode 100644 index 9855fcd2d..000000000 --- a/dist/win/nsis/unList.nsi +++ /dev/null @@ -1,220 +0,0 @@ -;----------------------------------------------------------------------------------------------- -; Generate list of files and directories for uninstaller with command line support (/? for help) -; Create installer and use like external program that generate list of files. -; -; 2006 Shengalts Aleksander aka Instructor (Shengalts@mail.ru) -;----------------------------------------------------------------------------------------------- -; - added file filter as command option -; 2005 Patrick Graf (patrick.graf@gmx.net) -;----------------------------------------------------------------------------------------------- -; - combine unList and unListDate to one script -; 2005 Matei "Ambient.Impact" Stanca (ambient.impact@rogers.com) -;----------------------------------------------------------------------------------------------- - -Name "unList v1.5" -OutFile "unList.exe" -Caption "$(^Name)" -SubCaption 2 " " -SubCaption 3 " " - -!include "FileFunc.nsh" -!insertmacro GetTime -!insertmacro GetParameters -!insertmacro GetOptions -!insertmacro GetExePath - -!include "TextFunc.nsh" -!insertmacro FileReadFromEnd -!insertmacro FileJoin -!insertmacro TrimNewLines - -!include "Sections.nsh" - -Var DATE -Var FILEFILTER -Var LOG -Var PREFIX -Var UNDIR_VAR -Var MB -Var RADIOBUTTON - -DirText '$\nSetup will generate list of files and directories for uninstaller.'\ - 'Source Folder' -Page directory -Page components -Page instfiles - -Section "unList" unList - StrCpy $DATE '0' - call main -SectionEnd - -Section /o "unListDate" unListDate - StrCpy $DATE '1' - call main -SectionEnd - -Function .onSelChange - !insertmacro StartRadioButtons $RADIOBUTTON - !insertmacro RadioButton ${unList} - !insertmacro RadioButton ${unListDate} - !insertmacro EndRadioButtons -FunctionEnd - -Function .onInit - StrCpy $RADIOBUTTON ${unList} - ${GetExePath} $EXEDIR - ${GetParameters} $R0 - StrCmp $R0 '/?' +2 - StrCmp $R0 '-?' 0 GetOptions - - MessageBox MB_OK \ - `| Command line options:$\n\ - | $\n\ - | /DATE=[0|1] Only files not modified after installation are deleted$\n\ - | default: 0$\n\ - | /INSTDIR=[path] Get file list from this path$\n\ - | default: [exe directory]$\n\ - | /FILTER=[*.*] Only files matching the given filter are added$\n\ - | default: *.*$\n\ - | /LOG=[file] Ouput file list$\n\ - | default: unList.txt$\n\ - | /PREFIX=[text] Insert text (spaces) at the beginning$\n\ - | default: empty$\n\ - | /UNDIR_VAR=[$$var] Uninstall directory variable$\n\ - | default: $$INSTDIR$\n\ - | /MB=[1|0] Show or not MessageBoxes$\n\ - | default: 1$\n\ - $\n\ - $\n\ - Example:$\n\ - unList.exe /DATE=1 /INSTDIR=C:\a /LOG=C:\a.log /PREFIX=" " /UNDIR_VAR=$$R0` - quit - - GetOptions: - ${GetOptions} '$R0' '/DATE=' $R1 - StrCmp $R1 '' 0 +3 - StrCpy $DATE '0' - Goto +2 - StrCpy $DATE $R1 - - ${GetOptions} '$R0' '/INSTDIR=' $R1 - StrCmp $R1 '' 0 +3 - StrCpy $INSTDIR '$EXEDIR' - goto +2 - StrCpy $INSTDIR $R1 - - ${GetOptions} '$R0' '/FILTER=' $R1 - StrCmp $R1 '' 0 +3 - StrCpy $FILEFILTER '*.*' - goto +2 - StrCpy $FILEFILTER $R1 - - ${GetOptions} '$R0' '/LOG=' $R1 - StrCmp $R1 '' 0 +3 - StrCpy $LOG 'unList.txt' - goto +2 - StrCpy $LOG $R1 - - ${GetOptions} '$R0' '/PREFIX=' $R1 - StrCmp $R1 '' 0 +3 - StrCpy $PREFIX '' - goto +2 - StrCpy $PREFIX $R1 - - ${GetOptions} '$R0' '/UNDIR_VAR=' $R1 - StrCmp $R1 '' 0 +3 - StrCpy $UNDIR_VAR '$$INSTDIR' - goto +2 - StrCpy $UNDIR_VAR $R1 - - ${GetOptions} '$R0' '/MB=' $R1 - StrCmp $R1 '' 0 +3 - StrCpy $MB '1' - goto +2 - StrCpy $MB $R1 - - StrCmp $R0 '' +2 - call main -FunctionEnd - -Function main - ClearErrors - SearchPath $INSTDIR $INSTDIR - IfErrors error - StrLen $R5 $INSTDIR - IntOp $R5 $R5 + 1 - - InitPluginsDir - GetTempFileName $R1 $PLUGINSDIR - GetTempFileName $R2 $PLUGINSDIR - GetTempFileName $R3 $PLUGINSDIR - ExpandEnvStrings $R0 %COMSPEC% - - nsExec::Exec '"$R0" /C DIR "$INSTDIR\$FILEFILTER" /A-D /B /S /ON>"$R1"' - FileOpen $R4 $R2 w - ${FileReadFromEnd} '$R1' FilesCallback - FileClose $R4 - - nsExec::Exec '"$R0" /C DIR "$INSTDIR\*.*" /AD /B /S /ON>"$R1"' - FileOpen $R4 $R3 w - ${FileReadFromEnd} '$R1' DirectoriesCallback - FileClose $R4 - - ${FileJoin} '$R2' '$R3' '$R2' - Delete '$EXEDIR\$LOG' - Rename $R2 '$EXEDIR\$LOG' - IfErrors 0 success - Delete $LOG - Rename $R2 $LOG - IfErrors 0 success - - error: - StrCmp $MB 0 quit - HideWindow - MessageBox MB_OK|MB_ICONEXCLAMATION 'error' - quit - - success: - StrCmp $MB 0 quit - HideWindow - MessageBox MB_OK|MB_ICONINFORMATION '"$LOG" was successfully generated' - - quit: - quit -FunctionEnd - -Function FilesCallback - System::Call 'user32::OemToChar(t r9, t .r9)' - ${TrimNewLines} '$9' $9 - - StrCmp $DATE '0' 0 unListDate - StrCpy $9 $9 '' $R5 - FileWrite $R4 `$PREFIXDelete "$UNDIR_VAR\$9"$\r$\n` - goto end - - unListDate: - ${GetTime} '$9' 'M' $0 $1 $2 $3 $4 $5 $6 - - StrCpy $3 '$${' - StrCpy $9 $9 '' $R5 - FileWrite $R4 `$PREFIX$3un.GetTime} "$UNDIR_VAR\$9" "M" $$0 $$1 $$2 $$3 $$4 $$5 $$6$\r$\n` - FileWrite $R4 `$PREFIXIfErrors +5$\r$\n` - FileWrite $R4 `$PREFIXStrCmp "$$0/$$1/$$2-$$4:$$5:$$6" "$0/$1/$2-$4:$5:$6" 0 +3$\r$\n` - FileWrite $R4 `$PREFIXDelete "$UNDIR_VAR\$9"$\r$\n` - FileWrite $R4 `$PREFIXgoto +2$\r$\n` - FileWrite $R4 `$PREFIXDetailPrint "Not deleted: $UNDIR_VAR\$9"$\r$\n$\r$\n` - - end: - Push 0 -FunctionEnd - -Function DirectoriesCallback - System::Call 'user32::OemToChar(t r9, t .r9)' - ${TrimNewLines} '$9' $9 - StrCpy $9 $9 '' $R5 - - FileWrite $R4 `$PREFIXRMDir "$UNDIR_VAR\$9"$\r$\n` - - Push 0 -FunctionEnd diff --git a/dist/win/nsis/valentina.nsi b/dist/win/nsis/valentina.nsi deleted file mode 100644 index 05a26d556..000000000 --- a/dist/win/nsis/valentina.nsi +++ /dev/null @@ -1,282 +0,0 @@ -; NSIS installer script for Valentina -; --------------- Headers -------------- -!include "MUI2.nsh" -!include "headers\fileassoc.nsh" -!include "headers\fileversion.nsh" -!include "FileFunc.nsh" - -; --------------- General -------------- -CRCCheck force -XPStyle on -SetCompressor /FINAL /SOLID lzma - -!insertmacro un.GetTime - -!define PACKAGE_FOLDER "valentina" - -!define PRODUCT_VALENTINA "Valentina" -!define FILE_VALENTINA "valentina" -!define PRODUCT_TAPE "Tape" -!define FILE_TAPE "tape" - -!insertmacro GetPEVersionLocal "${PACKAGE_FOLDER}\${FILE_VALENTINA}.exe" ver -!define MUI_VERSION "${ver_1}.${ver_2}.${ver_3}a" ; Delete "a" before release - -!define MUI_BRANDINGTEXT "${PRODUCT_VALENTINA} ${MUI_VERSION}" -!define WEBSITE_LINK "http://www.valentina-project.org/" -!define PUBLISHER "Roman Telezhynskyi" - -InstallDir "$LOCALAPPDATA\${PRODUCT_VALENTINA}" ; Default installation folder -Name "${MUI_BRANDINGTEXT}" ; Name displayed on installer -Icon "${PACKAGE_FOLDER}\${FILE_VALENTINA}.ico" -Caption "${MUI_BRANDINGTEXT}" - -!define /date MYTIMESTAMP "%Y%m%d%H%M%S" -OutFile "${FILE_VALENTINA}_${MUI_VERSION}-${MYTIMESTAMP}_i386.exe" ; Resulting installer filename - -InstallDirRegKey HKCU "$LOCALAPPDATA\${PRODUCT_VALENTINA}" "" ; Get installation folder from registry if available -LicenseData "${PACKAGE_FOLDER}\LICENSE_GPL.txt" -RequestExecutionLevel user ; Request application privileges for Windows Vista - -ShowInstDetails show -ShowUninstDetails show - -; ----------- Icon and Bitmap --------- -!define MUI_ICON "${PACKAGE_FOLDER}\${FILE_VALENTINA}.ico" -!define MUI_UNICON "${PACKAGE_FOLDER}\${FILE_VALENTINA}.ico" -;!define MUI_SPECIALBITMAP "Bitmap.bmp" - -; ------------------------------------- -!define MUI_ABORTWARNING - -;------------- Language Selection Dialog Settings -------------- -;Remember the installer language -!define MUI_LANGDLL_REGISTRY_ROOT "HKCU" -!define MUI_LANGDLL_REGISTRY_KEY "Software\${PRODUCT_VALENTINA}" -!define MUI_LANGDLL_REGISTRY_VALUENAME "Installer Language" -!define REG_UNINSTALL "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_VALENTINA}" -!define REGISTRY_ROOT "HKCU" - -;-------------- Install Pages ------------- - -!insertmacro MUI_PAGE_WELCOME -!insertmacro MUI_PAGE_LICENSE "${PACKAGE_FOLDER}\LICENSE_GPL.txt" -!insertmacro MUI_PAGE_DIRECTORY -!insertmacro MUI_PAGE_INSTFILES - ; These indented statements modify settings for MUI_PAGE_FINISH - !define MUI_FINISHPAGE_NOAUTOCLOSE - !define MUI_FINISHPAGE_RUN "$INSTDIR\${FILE_VALENTINA}.exe" - !define MUI_FINISHPAGE_RUN_CHECKED - !define MUI_FINISHPAGE_RUN_TEXT "Launch ${PRODUCT_VALENTINA}" - !define MUI_FINISHPAGE_SHOWREADME_NOTCHECKED - !define MUI_FINISHPAGE_SHOWREADME "$INSTDIR\README.txt" -!insertmacro MUI_PAGE_FINISH - -;-------------- Uninstall Pages ------------- -!insertmacro MUI_UNPAGE_WELCOME -!insertmacro MUI_UNPAGE_CONFIRM -!insertmacro MUI_UNPAGE_INSTFILES - ; These indented statements modify settings for MUI_UNPAGE_FINISH - !define MUI_UNFINISHPAGE_NOAUTOCLOSE -!insertmacro MUI_UNPAGE_FINISH - -;--------------- Languages --------------- -!define MUI_LANGDLL_ALLLANGUAGES -!insertmacro MUI_LANGUAGE "English" ;first language is the default language -!insertmacro MUI_LANGUAGE "German" -!insertmacro MUI_LANGUAGE "French" -!insertmacro MUI_LANGUAGE "Russian" -!insertmacro MUI_LANGUAGE "Ukrainian" -!insertmacro MUI_LANGUAGE "Czech" -!insertmacro MUI_LANGUAGE "Hebrew" -!insertmacro MUI_LANGUAGE "Italian" -!insertmacro MUI_LANGUAGE "Dutch" -!insertmacro MUI_LANGUAGE "Spanish" -!insertmacro MUI_LANGUAGE "SpanishInternational" -!insertmacro MUI_LANGUAGE "SimpChinese" -!insertmacro MUI_LANGUAGE "TradChinese" -!insertmacro MUI_LANGUAGE "Japanese" -!insertmacro MUI_LANGUAGE "Korean" -!insertmacro MUI_LANGUAGE "Danish" -!insertmacro MUI_LANGUAGE "Swedish" -!insertmacro MUI_LANGUAGE "Norwegian" -!insertmacro MUI_LANGUAGE "NorwegianNynorsk" -!insertmacro MUI_LANGUAGE "Finnish" -!insertmacro MUI_LANGUAGE "Greek" -!insertmacro MUI_LANGUAGE "Portuguese" -!insertmacro MUI_LANGUAGE "PortugueseBR" -!insertmacro MUI_LANGUAGE "Polish" -!insertmacro MUI_LANGUAGE "Slovak" -!insertmacro MUI_LANGUAGE "Croatian" -!insertmacro MUI_LANGUAGE "Bulgarian" -!insertmacro MUI_LANGUAGE "Hungarian" -!insertmacro MUI_LANGUAGE "Thai" -!insertmacro MUI_LANGUAGE "Romanian" -!insertmacro MUI_LANGUAGE "Latvian" -!insertmacro MUI_LANGUAGE "Macedonian" -!insertmacro MUI_LANGUAGE "Estonian" -!insertmacro MUI_LANGUAGE "Turkish" -!insertmacro MUI_LANGUAGE "Lithuanian" -!insertmacro MUI_LANGUAGE "Slovenian" -!insertmacro MUI_LANGUAGE "Serbian" -!insertmacro MUI_LANGUAGE "SerbianLatin" -!insertmacro MUI_LANGUAGE "Arabic" -!insertmacro MUI_LANGUAGE "Farsi" -!insertmacro MUI_LANGUAGE "Indonesian" -!insertmacro MUI_LANGUAGE "Mongolian" -!insertmacro MUI_LANGUAGE "Luxembourgish" -!insertmacro MUI_LANGUAGE "Albanian" -!insertmacro MUI_LANGUAGE "Breton" -!insertmacro MUI_LANGUAGE "Belarusian" -!insertmacro MUI_LANGUAGE "Icelandic" -!insertmacro MUI_LANGUAGE "Malay" -!insertmacro MUI_LANGUAGE "Bosnian" -!insertmacro MUI_LANGUAGE "Kurdish" -!insertmacro MUI_LANGUAGE "Irish" -!insertmacro MUI_LANGUAGE "Uzbek" -!insertmacro MUI_LANGUAGE "Galician" -!insertmacro MUI_LANGUAGE "Afrikaans" -!insertmacro MUI_LANGUAGE "Catalan" -!insertmacro MUI_LANGUAGE "Esperanto" - -; ------------- Reserve Files --------------------- -;If you are using solid compression, files that are required before -;the actual installation should be stored first in the data block, -;because this will make your installer start faster. -!insertmacro MUI_RESERVEFILE_LANGDLL - -; ------------- Installer Functions --------------- -Function checkAlreadyInstalled - ; check for already installed instance - ClearErrors - ReadRegStr $R0 "${REGISTRY_ROOT}" "${REG_UNINSTALL}" "UninstallString" - StrCmp $R0 "" done - MessageBox MB_OKCANCEL|MB_ICONEXCLAMATION \ - "${PRODUCT_VALENTINA} is already installed. $\n$\nClick `OK` to remove the \ - previous version or `Cancel` to cancel this upgrade." \ - IDOK UnInstall - Abort - ;Run the uninstaller - UnInstall: - ClearErrors - ExecWait '$R0 _?=$INSTDIR' ;Do not copy the uninstaller to a temp file - - ;uninstall.exe is still here - ;Delete Files - RMDir /r "$INSTDIR\*.*" - ;Remove the installation directory - RMDir "$INSTDIR" - - IfErrors no_remove_uninstaller done - ;You can either use Delete /REBOOTOK in the uninstaller or add some code - ;here to remove the uninstaller. Use a registry key to check - ;whether the user has chosen to uninstall. If you are using an uninstaller - ;components page, make sure all sections are uninstalled. - no_remove_uninstaller: - MessageBox MB_OK|MB_ICONSTOP "Error while uninstalling \ - previously installed version. Please uninstall it manually \ - and start the installer again." - Quit - done: -FunctionEnd - -Function .onInit - !insertmacro MUI_LANGDLL_DISPLAY ;This has to come after the language macros - Call checkAlreadyInstalled -FunctionEnd - -;-------------- Uninstaller Functions ------------- -Function un.onInit - !insertmacro MUI_UNGETLANGUAGE -FunctionEnd - -;-------------- Installer ------------------------- -Section - -;Add files -SetOutPath "$INSTDIR" ; Set output path to the installation directory. -File /r "${PACKAGE_FOLDER}\*.*" - -;create start-menu items -!define START_LINK_DIR "$SMPROGRAMS\${PRODUCT_VALENTINA}" -!define START_LINK_RUN "$SMPROGRAMS\${PRODUCT_VALENTINA}\${PRODUCT_VALENTINA}.lnk" -!define START_LINK_RUN_TAPE "$SMPROGRAMS\${PRODUCT_VALENTINA}\${PRODUCT_TAPE}.lnk" -!define START_LINK_UNINSTALLER "$SMPROGRAMS\${PRODUCT_VALENTINA}\Uninstall ${PRODUCT_VALENTINA}.lnk" - -# In your main installer section... -SetShellVarContext current -CreateDirectory "${START_LINK_DIR}" -CreateShortCut "${START_LINK_RUN}" "$INSTDIR\${FILE_VALENTINA}.exe" -CreateShortCut "${START_LINK_RUN_TAPE}" "$INSTDIR\${FILE_TAPE}.exe" -CreateShortCut "${START_LINK_UNINSTALLER}" "$INSTDIR\Uninstall.exe" - -;create desktop shortcut -CreateShortCut "$DESKTOP\${PRODUCT_VALENTINA}.lnk" "$INSTDIR\${FILE_VALENTINA}.exe" "" -CreateShortCut "$DESKTOP\${PRODUCT_TAPE}.lnk" "$INSTDIR\${FILE_TAPE}.exe" "" - -;write uninstall information to the registry -!define UNINSTALLER_NAME "Uninstall.exe" - -; File associations -; Valentina -!insertmacro APP_ASSOCIATE "val" "valentina.pattern" "text/plain" "${PRODUCT_VALENTINA} pattern file" "$INSTDIR\pattern.ico" "Open with ${PRODUCT_VALENTINA}" "$INSTDIR\${FILE_VALENTINA}.exe $\"%1$\"" -; Tape -!insertmacro APP_ASSOCIATE "vit" "valentina.IndividualMeasurements" "text/plain" "${PRODUCT_VALENTINA} individual measurement file" "$INSTDIR\i-measurements.ico" "Open with ${PRODUCT_TAPE}" "$INSTDIR\${FILE_TAPE}.exe $\"%1$\"" -!insertmacro APP_ASSOCIATE "vst" "valentina.StandardMeasurements" "text/plain" "${PRODUCT_VALENTINA} standard measurement file" "$INSTDIR\s-measurements.ico" "Open with ${PRODUCT_TAPE}" "$INSTDIR\${FILE_TAPE}.exe $\"%1$\"" -!insertmacro UPDATEFILEASSOC - -WriteRegStr "${REGISTRY_ROOT}" "${REG_UNINSTALL}" "DisplayName" "${PRODUCT_VALENTINA}" -WriteRegStr "${REGISTRY_ROOT}" "${REG_UNINSTALL}" "DisplayIcon" "$\"$INSTDIR\${FILE_VALENTINA}.exe$\"" -WriteRegStr "${REGISTRY_ROOT}" "${REG_UNINSTALL}" "Publisher" "${PUBLISHER}" -WriteRegStr "${REGISTRY_ROOT}" "${REG_UNINSTALL}" "DisplayVersion" "${MUI_VERSION}" - -; Run GetSize after coping all files -${GetSize} "$INSTDIR" "/S=0K" $0 $1 $2 -IntFmt $0 "0x%08X" $0 -WriteRegDWord "${REGISTRY_ROOT}" "${REG_UNINSTALL}" "EstimatedSize" "$0" - -WriteRegStr "${REGISTRY_ROOT}" "${REG_UNINSTALL}" "HelpLink" "${WEBSITE_LINK}" -WriteRegStr "${REGISTRY_ROOT}" "${REG_UNINSTALL}" "URLInfoAbout" "${WEBSITE_LINK}" -WriteRegStr "${REGISTRY_ROOT}" "${REG_UNINSTALL}" "InstallLocation" "$\"$INSTDIR$\"" -WriteRegStr "${REGISTRY_ROOT}" "${REG_UNINSTALL}" "InstallSource" "$\"$EXEDIR$\"" -WriteRegDWord "${REGISTRY_ROOT}" "${REG_UNINSTALL}" "NoModify" 1 -WriteRegDWord "${REGISTRY_ROOT}" "${REG_UNINSTALL}" "NoRepair" 1 -WriteRegStr "${REGISTRY_ROOT}" "${REG_UNINSTALL}" "UninstallString" "$\"$INSTDIR\${UNINSTALLER_NAME}$\"" -WriteRegStr "${REGISTRY_ROOT}" "${REG_UNINSTALL}" "Comments" "Uninstalls ${PRODUCT_VALENTINA}." - -WriteUninstaller "$INSTDIR\${UNINSTALLER_NAME}" ; Location of the uninstaller - -SectionEnd - -;-------------------------------- -;Uninstaller Section -Section "Uninstall" -;Generate list and include it in script at compile-time -!execute 'unList.exe /DATE=0 /INSTDIR=${PACKAGE_FOLDER} /LOG=Test.log /PREFIX=" " /UNDIR_VAR=$INSTDIR /MB=0' -;Log contain commands for removing files -!include "Test.log" - -;Delete Start Menu Shortcuts -SetShellVarContext current -Delete "$DESKTOP\${PRODUCT_VALENTINA}.lnk" -Delete "$DESKTOP\${PRODUCT_TAPE}.lnk" -Delete "${START_LINK_DIR}\*.*" -RmDir "${START_LINK_DIR}" - -; Removing file associations -!insertmacro APP_UNASSOCIATE "val" "valentina.pattern" -!insertmacro APP_UNASSOCIATE "vit" "valentina.IndividualMeasurements" -!insertmacro APP_UNASSOCIATE "vst" "valentina.StandardMeasurements" - -;Delete Uninstaller And Unistall Registry Entries -DeleteRegKey "${REGISTRY_ROOT}" "SOFTWARE\${PRODUCT_VALENTINA}" -DeleteRegKey "${REGISTRY_ROOT}" "${REG_UNINSTALL}" - -Delete "$INSTDIR\${UNINSTALLER_NAME}" - -;Remove the installation directory -RMDir "$INSTDIR" - -SectionEnd - -;eof diff --git a/src/app/valentina/valentina.pro b/src/app/valentina/valentina.pro index ece8b356e..42cfc0fc2 100644 --- a/src/app/valentina/valentina.pro +++ b/src/app/valentina/valentina.pro @@ -436,34 +436,28 @@ win32:*-g++ { INSTALLS += package_printsupport contains(QT_ARCH, i386) { - NSIS_MAKENSISW = "C:/Program Files/NSIS/makensisw.exe" + INNO_ISCC = "C:/Program Files (x86)/Inno Setup 5/iscc.exe" } else { - NSIS_MAKENSISW = "C:/Program Files (x86)/NSIS/makensisw.exe" + INNO_ISCC = "C:/Program Files/Inno Setup 5/iscc.exe" } - exists($$NSIS_MAKENSISW) { - package_nsis.path = $${OUT_PWD}/../../../package - package_nsis.files += \ - $$PWD/../../../dist/win/nsis/valentina.nsi \ - $$PWD/../../../dist/win/nsis/unList.exe # copy exe instead of creating from nsi - INSTALLS += package_nsis - - package_nsis_headers.path = $${OUT_PWD}/../../../package/headers - package_nsis_headers.files += \ - $$PWD/../../../dist/win/nsis/headers/fileassoc.nsh \ - $$PWD/../../../dist/win/nsis/headers/fileversion.nsh - INSTALLS += package_nsis_headers + exists($$INNO_ISCC) { + package_inno.path = $${OUT_PWD}/../../../package + package_inno.files += \ + $$PWD/../../../dist/win/inno/LICENSE_VALENTINA \ + $$PWD/../../../dist/win/inno/valentina.iss + INSTALLS += package_inno # Do the packaging # First, mangle all of INSTALLS values. We depend on them. unset(MANGLED_INSTALLS) for(x, INSTALLS):MANGLED_INSTALLS += install_$${x} build_package.path = $${OUT_PWD}/../../../package - build_package.commands = $$NSIS_MAKENSISW \"$${OUT_PWD}/../../../package/valentina.nsi\" + build_package.commands = $$INNO_ISCC \"$${OUT_PWD}/../../../package/valentina.iss\" build_package.depends = $${MANGLED_INSTALLS} INSTALLS += build_package } else { - message("NSIS was not found!") + message("Inno Setup was not found!") } }