Wątek przeniesiony 2019-05-16 19:26 z przez kq.

Porządne tutoriale do NSISa

Odpowiedz Nowy wątek
2019-05-16 19:04
0

Witam Bracia i Siostry w kodzie

Czy ktoś z Was zna jakieś naprawdę porządne, esencjonalne, takie od dechy do dechy tutoriale do NSISa, ewentualnie wie jak robić w tym instalatory? Gógluję od paru godzin, ale znajduję jedynie albo jakieś Hello Wordy z jednym message boxem, albo coś wyrąbanego w kosmos co dla zielonego w temacie jest kompletnie niestrawne, natomiast nie natrafiłem na nic co do Peruna miałoby wszystko po kolei opisane jak Swaróg przykazał:

  • strona 'Welcome', i wyjaśnienie co i jak tam na niej sobie pokazać
  • strona license, i j.w.
  • strona wyboru folderu instalacyjnego
  • strona wyboru komponentów do instalacji
  • instalowanie
  • deinstalator
  • skróty w menu start i na pulpicie

Trochę poratowałem się wizardem NSIS Quick Setup Script Generator, ale to co wyrzucił nie jest niestety do końca tym co bym potrzebował (brakuje możliwości wyboru komponentów).

Poratujcie Bracia!
(@kq - przerzuć proszę we właściwe miejsce forum)


"Sugeruję wyobrazić sobie Słońce widziane z orbity Merkurego, a następnie dupę tej wielkości. W takiej właśnie dupie specjalista ma teksty o wspaniałej atmosferze, pracy pełnej wyzwań i tworzeniu innowacyjnych rozwiązań. Pracuje się po to, żeby zarabiać, a z resztą specjalista sobie poradzi we własnym zakresie, nawet jeśli firma mieści się w okopie na granicy obu Korei."
-somekind,
konkretny człowiek-konkretny przekaz :]
Jak znajde swoj wszystkomajacy skrypt to podesle. - vpiotr 2019-05-16 19:18
Nie ma idealnej kategorii, ale ta jest chyba najbliższa. Daj znać jak nie pasuje. - kq 2019-05-16 19:26
dzięki Bracia - MasterBLB 2019-05-16 20:05

Pozostało 580 znaków

2019-05-18 18:10

Wykorzystaj funkcje ShouldSkipPage i zależnie od zaznaczonego komponentu wyświetl.
Kolejność kiedy ma byc wyświetlana strona zalezy od pierwszego argumenu funkcji CreateInputFilePage teraz wyswietli się po komponentach.

Masz błąd w linijce:

if not DirExists(battletechPage.Values[0] + '\BattleTech_Data\StreamingAssets\data\flashpoints') then

Warośc battletechPage.Values[0] to ścieżka razem z plikiem więc sprawdzasz taki katalog:

c:\folder\battletech.exe\BattleTech_Data\StreamingAssets\data\flashpoints więc raczej cięzko aby istniała użyj ExtractFileDir(battletechPage.Values[0])

 [Setup]
 AppName=4p
 AppVersion=1
 AlwaysShowComponentsList=yes
 DefaultDirName={sd}\4p

 [Types]
 Name: "Core"; Description: "Mech Designer required files"; Flags: iscustom
 Name: "Flashpoint"; Description: "Flashpoint mechs data files"

 [Components]
 Name: "MechDesigner"; Description: "Mech Designer core files"; Types: Core
 Name: "FlashpointPack"; Description: "Flashpoint mechs pack"; Types: Core Flashpoint

 [Code]
 var
   battletechPage: TInputFileWizardPage;
   battletechPageID: Integer;
 procedure InitializeWizard;
 begin
   battletechPage := CreateInputFilePage(wpSelectTasks, 'Mech pack requires additional path leading to battletech.exe', '', 'Navigate to and point the battletech.exe from expansion');
   battletechPage.Add('Path to battletech.exe', 'battletech.exe|battletech.exe', '.exe');
   battletechPageID := battletechPage.ID;
 end;

 procedure RegisterPreviousData(PreviousDataKey: Integer);
 begin
   // Store the selected folder for further reinstall/upgrade
   SetPreviousData(PreviousDataKey, 'battletechfile', battletechPage.Values[0]);
 end;

 function NextButtonClick(CurPageID: Integer): Boolean;
 begin
   Result := True;
   if CurPageID = battletechPageID then
   begin
     if battletechPage.Values[0] = '' then
     begin
       MsgBox('You have to select the battletech.exe!', mbInformation, MB_OK);
       Result := False;
     end
     else
     begin
       //KOD JAK JEST OK
       msgbox(ExtractFileDir(battletechPage.Values[0]), mbInformation, MB_OK);
       //oto co ja dodałem. Zaraz odpalę gógle aby znaleźć "pascal string concatenation"
       //hmmm no niby twierdzą w https://www.freepascal.org/docs-html/rtl/system/concat.html, że operator + działa, to czemu nie wykrywa warunku??
       if not DirExists(ExtractFileDir(battletechPage.Values[0]) + '\BattleTech_Data\StreamingAssets\data\flashpoints') then        
       begin
           msgbox('Wrong path! You have to navigare to Flashpoint main folder!', mbInformation, MB_OK);
           Result := false;
          //tu sprawdzenie czy w dobre miejsce użytkownik pokierował
       end;
     end;
   end;
 end;

 function battletechDir(Param: String): String;
 begin
   { Return the selected DataDir }
   Result := ExtractFileDir(battletechPage.Values[0]);
 end;
function ShouldSkipPage(PageID: Integer): Boolean;
begin
  Result := False;
  if PageID = battletechPageID then
    Result := not IsComponentSelected('FlashpointPack');
end;

Pozostało 580 znaków

2019-05-18 18:28
0

DZIAŁA! Olbrzymie dzięki, teraz dospawam to do swojego głównego pliku. Miałeś rację Bracie Paczo, NSIS nawet się nie umywa do prostoty i przyjazności Inno Setup. Inno Script Studio też jest dobre.


"Sugeruję wyobrazić sobie Słońce widziane z orbity Merkurego, a następnie dupę tej wielkości. W takiej właśnie dupie specjalista ma teksty o wspaniałej atmosferze, pracy pełnej wyzwań i tworzeniu innowacyjnych rozwiązań. Pracuje się po to, żeby zarabiać, a z resztą specjalista sobie poradzi we własnym zakresie, nawet jeśli firma mieści się w okopie na granicy obu Korei."
-somekind,
konkretny człowiek-konkretny przekaz :]

Pozostało 580 znaków

2019-05-18 19:45
0

Ja bym powiedział, że inno bardziej mi podpasowal. Nie mam jakiegoś szczególnego porównania obu, bo wiem że w NSIS też byś to osiągnął. Inno ułatwił mi start i dzięki temu z nim zostałem. Zresztą jak często pisze się instalatory, sam musiałem sobie sporo odświeżyć odpowiadając na Twoje pytania.
Pewnie jakbyś trafił na tym forum na kogoś kto zna NSISa to by Cię pokierował tak samo jak ja Ciebie

Pozostało 580 znaków

2019-05-18 19:49
0

No ale nie trafiłem na takowego speca od NSISa. Okkay, jest wstępna wersja działająca jak chcę (tylko jeszcze tego powiązania nie robi, ale to potem sam dospawam), zatem Bracie Panczo nie tylko dostaniesz słusznie należnego ptaszka, ale i @cerrato zawołam aby postawił łapkę przy każdym Twoim poście, bo zasługują na więcej niż jedną.

A dla potomnych kod:

[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={{CD963CF4-FE83-434A-B3FA-67BB45338268}
AppName=Mech Designer
AppVersion=0.7
;AppVerName=Mech Designer 0.7
AppPublisher=MasterBLB's Soft
DefaultDirName={sd}\Mech Designer by MasterBLB
DefaultGroupName=Mech Designer by MasterBLB
AllowNoIcons=yes
LicenseFile=C:\Qt\Projects\MechDesigner\Documentation\license.txt
Compression=lzma
SolidCompression=yes
DisableWelcomePage=False
AllowRootDirectory=False
ShowLanguageDialog=yes
AlwaysShowComponentsList=yes
OutputBaseFilename=MechDesignerInstaller
OutputDir=C:\Qt\Projects\MechDesigner\Installer
;if only a mech pack is installed don't create uninstaller
Uninstallable=WizardIsComponentSelected('MechDesigner')

[Types]
Name: "Core"; Description: "Full installation"
Name: "Flashpoint"; Description: "Only Flashpoint mechs data files"
Name: "Custom"; Description: "Custom installation"; Flags: iscustom

[Components]
Name: "MechDesigner"; Description: "Mech Designer core files"; Types: Core Custom
Name: "FlashpointPack"; Description: "Flashpoint mechs pack"; Types: Core Flashpoint Custom

[Files]
Source: "C:\Qt\Projects\MechDesigner\Installer\Data\MechDesigner.exe"; DestDir: "{app}"; Components: MechDesigner
Source: "C:\Qt\Projects\MechDesigner\Installer\Data\setup.ini"; DestDir: "{app}"; Components: MechDesigner; Flags: onlyifdoesntexist
Source: "..\Documentation\Mech Designer user's manual.pdf"; DestDir: "{app}"; Components: MechDesigner; Flags: isreadme
; NOTE: Don't use "Flags: ignoreversion" on any shared system files
Source: "Data\libgcc_s_dw2-1.dll"; DestDir: "{app}"; Components: MechDesigner
Source: "Data\libstdc++-6.dll"; DestDir: "{app}"; Components: MechDesigner
Source: "Data\libwinpthread-1.dll"; DestDir: "{app}"; Components: MechDesigner
Source: "Data\Qt5Core.dll"; DestDir: "{app}"; Components: MechDesigner
Source: "Data\Qt5Gui.dll"; DestDir: "{app}"; Components: MechDesigner
Source: "Data\Qt5Widgets.dll"; DestDir: "{app}"; Components: MechDesigner
Source: "Data\GUI\Actuators.png"; DestDir: "{app}\GUI"; Components: MechDesigner
Source: "Data\GUI\Ammo.png"; DestDir: "{app}\GUI"; Components: MechDesigner
Source: "Data\GUI\BallisticHardpoint.png"; DestDir: "{app}\GUI"; Components: MechDesigner
Source: "Data\GUI\CloseButton.PNG"; DestDir: "{app}\GUI"; Components: MechDesigner
Source: "Data\GUI\CockpitMods.png"; DestDir: "{app}\GUI"; Components: MechDesigner
Source: "Data\GUI\Computers.png"; DestDir: "{app}\GUI"; Components: MechDesigner
Source: "Data\GUI\DockedMode.png"; DestDir: "{app}\GUI"; Components: MechDesigner
Source: "Data\GUI\EnergyHardpoint.png"; DestDir: "{app}\GUI"; Components: MechDesigner
Source: "Data\GUI\FloatingMode.png"; DestDir: "{app}\GUI"; Components: MechDesigner
Source: "Data\GUI\Gyro.png"; DestDir: "{app}\GUI"; Components: MechDesigner
Source: "Data\GUI\HeatDissipated.png"; DestDir: "{app}\GUI"; Components: MechDesigner
Source: "Data\GUI\HeatGenerated.png"; DestDir: "{app}\GUI"; Components: MechDesigner
Source: "Data\GUI\Heatsinks.png"; DestDir: "{app}\GUI"; Components: MechDesigner
Source: "Data\GUI\JumpJets.png"; DestDir: "{app}\GUI"; Components: MechDesigner
Source: "Data\GUI\MissileHardpoint.png"; DestDir: "{app}\GUI"; Components: MechDesigner
Source: "Data\GUI\Slots.png"; DestDir: "{app}\GUI"; Components: MechDesigner
Source: "Data\GUI\SupportHardpoint.png"; DestDir: "{app}\GUI"; Components: MechDesigner
Source: "Data\GUI\Tonnage.png"; DestDir: "{app}\GUI"; Components: MechDesigner
Source: "Data\GUI\Warning.png"; DestDir: "{app}\GUI"; Components: MechDesigner
Source: "Data\platforms\qwindows.dll"; DestDir: "{app}\platforms"; Components: MechDesigner
Source: "Data\styles\qwindowsvistastyle.dll"; DestDir: "{app}\styles"; Components: MechDesigner

;Flashpoint mechs data
Source: "Data\Flashpoint mechs\chassisdef_crab__fp_gladiator_BSC-27.json"; DestDir: "{code:battletechDataDir}\chassis"; Flags: uninsneveruninstall confirmoverwrite; Components: FlashpointPack
Source: "Data\Flashpoint mechs\mechdef_crab__fp_gladiator_BSC-27.json"; DestDir: "{code:battletechDataDir}\mech"; Flags: uninsneveruninstall confirmoverwrite; Components: FlashpointPack
Source: "Data\Flashpoint mechs\chassisdef_crab_CRB-27.json"; DestDir: "{code:battletechDataDir}\chassis"; Flags: uninsneveruninstall confirmoverwrite; Components: FlashpointPack
Source: "Data\Flashpoint mechs\mechdef_crab_CRB-27.json"; DestDir: "{code:battletechDataDir}\mech"; Flags: uninsneveruninstall confirmoverwrite; Components: FlashpointPack
Source: "Data\Flashpoint mechs\chassisdef_cyclops_CP-10-Q.json"; DestDir: "{code:battletechDataDir}\chassis"; Flags: uninsneveruninstall confirmoverwrite; Components: FlashpointPack
Source: "Data\Flashpoint mechs\mechdef_cyclops_CP-10-Q.json"; DestDir: "{code:battletechDataDir}\mech"; Flags: uninsneveruninstall confirmoverwrite; Components: FlashpointPack
Source: "Data\Flashpoint mechs\chassisdef_cyclops_CP-10-Z.json"; DestDir: "{code:battletechDataDir}\chassis"; Flags: uninsneveruninstall confirmoverwrite; Components: FlashpointPack
Source: "Data\Flashpoint mechs\mechdef_cyclops_CP-10-Z.json"; DestDir: "{code:battletechDataDir}\mech"; Flags: uninsneveruninstall confirmoverwrite; Components: FlashpointPack
Source: "Data\Flashpoint mechs\chassisdef_hatchetman_HCT-3F.json"; DestDir: "{code:battletechDataDir}\chassis"; Flags: uninsneveruninstall confirmoverwrite; Components: FlashpointPack
Source: "Data\Flashpoint mechs\mechdef_hatchetman_HCT-3F.json"; DestDir: "{code:battletechDataDir}\mech"; Flags: uninsneveruninstall confirmoverwrite; Components: FlashpointPack

[Icons]
Name: "{group}\Mech Designer"; Filename: "{app}\MechDesigner.exe"; Components: MechDesigner
Name: "{group}\Mech Designer user's manual"; Filename: "{app}\Mech Designer user's manual.pdf"; Components: MechDesigner
Name: "{group}\{cm:UninstallProgram,Mech Designer}"; Filename: "{uninstallexe}"; Components: MechDesigner
Name: "{commondesktop}\Mech Designer"; Filename: "{app}\MechDesigner.exe"; Tasks: desktopicon; Components: MechDesigner

[Tasks]
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Components: MechDesigner

[Run]
Filename: "{app}\MechDesigner.exe"; Description: "{cm:LaunchProgram,Mech Designer}"; Flags: nowait postinstall skipifsilent; Components: MechDesigner

[Code]
var
  battletechPage: TInputFileWizardPage;
  battletechPageID: Integer;

function battletechDataDir(Param: String): String;
begin
  //Return the selected DataDir - it removes battletech.exe from the path, and returns the rest
  Result := ExtractFileDir(battletechPage.Values[0]) + '\BattleTech_Data\StreamingAssets\data';
end;  

procedure InitializeWizard;
begin
  battletechPage := CreateInputFilePage(wpSelectTasks, 'Flashpoint mech pack requires additional path which leads to proper battletech.exe', '', 'Navigate to and point the battletech.exe from expansion');
  battletechPage.Add('Path to battletech.exe', 'battletech.exe|battletech.exe', '.exe');
  battletechPageID := battletechPage.ID;
end;

procedure RegisterPreviousData(PreviousDataKey: Integer);
begin
  // Store the selected folder for further reinstall/upgrade
  SetPreviousData(PreviousDataKey, 'battletechfile', battletechPage.Values[0]);
end;

function NextButtonClick(CurPageID: Integer): Boolean;
begin
  Result := True;
  if CurPageID = battletechPageID then
  begin
    if battletechPage.Values[0] = '' then
    begin
      MsgBox('You have to select the battletech.exe!', mbInformation, MB_OK);
      Result := False;
    end
    else
    begin
      //check if user selected right directory
      if not DirExists(ExtractFileDir(battletechPage.Values[0]) + '\BattleTech_Data\StreamingAssets\data\flashpoints') then        
      begin
        msgbox('Wrong path! You have to navigare to Battletech Flashpoint main folder!', mbInformation, MB_OK);
        Result := false;
      end;
    end;
  end;
end;

function ShouldSkipPage(PageID: Integer): Boolean;
begin
  Result := False;
  if PageID = battletechPageID then Result := not IsComponentSelected('FlashpointPack');
end;

"Sugeruję wyobrazić sobie Słońce widziane z orbity Merkurego, a następnie dupę tej wielkości. W takiej właśnie dupie specjalista ma teksty o wspaniałej atmosferze, pracy pełnej wyzwań i tworzeniu innowacyjnych rozwiązań. Pracuje się po to, żeby zarabiać, a z resztą specjalista sobie poradzi we własnym zakresie, nawet jeśli firma mieści się w okopie na granicy obu Korei."
-somekind,
konkretny człowiek-konkretny przekaz :]
Masz literówkę: navigare. Co do łapek to nie dla nich pomagam na forum... - Panczo 2019-05-18 19:54
Domyślam się, ale tak rzetelna pomoc zasługuje na najpełniejsze wyrazy uznania :) - MasterBLB 2019-05-18 19:56
A powiązanie plików dodasz graficznie w Inno Script Studio - Panczo 2019-05-18 20:17
W dalszej kolejności czeka mnie wgranie setup.ini, otwarcie go, i dodanie wpisu jeśli użytkownik wybrał mech packa, ale to już sam spróbuję. Jak się nie uda przynajmniej wiem, kto jest w stanie pomóc ^^ - MasterBLB 2019-05-18 20:47

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0