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-16 20:26
1

Skrypt: https://gist.github.com/vpiotr/e6b64861c32fa25f1b5c3d37cc86265f

Jakby coś było niejasne to pytaj, ale ostrzegam że to skrypt z 2011 roku.


Szacuje się, że w Polsce brakuje 50 tys. programistów
To jest właśnie dobry przykład "wyrąbania w kosmos" - MasterBLB 2019-05-16 21:44
Ale i tak masz łapkę za chęć pomocy - MasterBLB 2019-05-18 19:50

Pozostało 580 znaków

2019-05-16 21:22
2

Miałem klika podejść do NSIS i jakoś nie mogłem się przesiąść, kiedyś używałem Bytessence InstallMaker (BIM) ale padło i szukałem alternatywy, wtedy rozkminiałem co wybrać i po researchu zostały mi dwa: NSIS i Inno Setup , wybrałem Inno Setuo, wraz z Inno Script Studio pozwala w łatwy sposób stworzyć prostego instalatora bez zagłębiania się w meandry dokumentacji,

Nie pomogłem, ale jak czytam post to widzę że jesteś na początku drogi więc zmiana nie powinna być bolesna.

Pozostało 580 znaków

2019-05-18 11:28
0

@Panczo:
Faktycznie, ten Inno Setup wydaje się dużo przyjaźniejszy, niestety, instalator jakiego potrzebuję nie należy do prostych :/ Oto co ma robić:

  1. Pokazać stronę powitalną //to poszło
  2. Pokazać licencję //to też
  3. Zapytać się o ścieżkę instalacji //i to również
  4. Zapytać się o ścieżkę do battletech.exe -> $BattletechFolder //tego niestety nie umiem :/
  5. Wyświetlić listę komponentów do zainstalowania: //uznajmy, że jakoś tam się udało. Niestety, własne [TYPES] nie działają, ale walić to
    • Mech Designer core
    • Flashpoint mechs pack //tutaj może sprawdzać np czy w /data jest folder /flashpoint, jak nie znajdzie to dać komponent jako nieaktywny?
    • Uwaga!!! jeśli lokacje /chassisdef oraz /mechdef zawierają tak nazwane .jsony to zapytać o nadpisanie!
  6. Skopiować pliki do INSTALDIR// a komponent Flashpoint mechs pack do odpowiednich podfolderów $BattletechFolder. Generalnie poszło poza uwarunkowaniem typem komponentu
  7. Opcjonalnie powiązać pliki .mechDesign z aplikacją Mech Designer //tylko dla komponentu core
  8. Zapytać się o utworzenie grupy w menu Start, oraz ikony na pulpicie //tylko dla komponentu core. Generalnie poszło poza uwarunkowaniem typem komponentu
  9. Utworzyć deinstalator, przy czym UWAGA! Jeśli był instalowany wyłącznie komponent "Flashpoint mechs" wtedy ma nie tworzyć. Generalnie poszło poza uwarunkowaniem typem komponentu
  10. Zakończyć instalację

"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 12:46
2
  1. Zapytać się o ścieżkę do battletech.exe -> $BattletechFolder //tego niestety nie umiem :/

http://www.vincenzo.net/isxkb[...]an_additional_folder_for_data

  1. Wyświetlić listę komponentów do zainstalowania: //uznajmy, że jakoś tam się udało. Niestety, własne [TYPES] nie działają, ale walić to

To dewiniujesz w sekcji TYPES http://www.jrsoftware.org/ishelp/index.php?topic=typessection, jeżeli ustawisz, flagę iscustom wtedy instalator przejdzie do wyboru komponentów http://www.jrsoftware.org/ishelp/topic_componentssection.htm

Lub ustawić w skrypcie AlwaysShowComponentsList na Yes i wtedy zawsze będzie lista komponentów do wybrania

  • Flashpoint mechs pack //tutaj może sprawdzać np czy w /data jest folder /flashpoint, jak nie znajdzie to dać komponent jako nieaktywny?

Mozna tak: https://stackoverflow.com/que[...]cific-components-in-innosetup
Zamiast na sztywno pisać false użyć wbudowanej funkcji DirExists(DirName);

  • Uwaga!!! jeśli lokacje /chassisdef oraz /mechdef zawierają tak nazwane .jsony to zapytać o nadpisanie!

To możesz ustawić flagą confirmoverwrite w sekcji files http://www.jrsoftware.org/ishelp/index.php?topic=filessection

  1. Skopiować pliki do INSTALDIR// a komponent Flashpoint mechs pack do odpowiednich podfolderów $BattletechFolder. Generalnie poszło poza uwarunkowaniem typem komponentu

z pierwszego linku:

[Files]
;Main program that will be installed in {app} folder
Source: MyProg.exe; DestDir: {app}

;Database file that will installed where user choosed
Source: DataBase.mdb; DestDir: {code:GetDataDir}\nazwapodfolderu
  1. Opcjonalnie powiązać pliki .mechDesign z aplikacją Mech Designer //tylko dla komponentu core

http://www.jrsoftware.org/isfaq.php#assoc i we wpisać registy dodać Components: core

  1. Zapytać się o utworzenie grupy w menu Start, oraz ikony na pulpicie //tylko dla komponentu core. Generalnie poszło poza uwarunkowaniem typem komponentu

Tworzysz taska:

[Icons]
Name: "{userdesktop}\program"; Filename: "{app}\start.exe"; IconFilename: "{app}\pulpitikona.ico"; Components: core; Tasks: desktopicon\user
Name: "{commondesktop}\progr"; Filename: "{app}\start.exe"; IconFilename: "{app}\pulpitikona.ico"; Components: core; Tasks: desktopicon\common

[Tasks]
;Ikony pulpit
Name: desktopicon; Description: "Czy utworzyć skrót na pulpicie"; GroupDescription: "Skróty na pulpicie:"; Components: core
Name: desktopicon\common; Description: "Dla wszystkich użytkowników"; GroupDescription: "Skróty na pulpicie:"; Components: core; Flags: exclusive
Name: desktopicon\user; Description: "Tylko dla bieżącego użytkownika"; GroupDescription: "Skróty na pulpicie:"; Components: core; Flags: exclusive unchecked
  1. Utworzyć deinstalator, przy czym UWAGA! Jeśli był instalowany wyłącznie komponent "Flashpoint mechs" wtedy ma nie tworzyć. Generalnie poszło poza uwarunkowaniem typem komponentu

Deinstalator sie tworzy sam, to wynika z opcji które zaznaczasz i zależne jest od falg odpowiedzialnych za odinstalowanie

  1. Zakończyć instalację
edytowany 1x, ostatnio: Panczo, 2019-05-18 12:50

Pozostało 580 znaków

2019-05-18 13:20
0

Kude, ratuj Bracie @Panczo! znienacka zniknęło mi pytanie się o ścieżkę do instalacji :/ po prostu tej strony nie ma.

EDIT:
Ale ze mnie <tu wstaw wyrażenie>...nie odinstalowałem poprzedniej instancji, więc z automatu chciał robić aktualizację do poprzedniej lokacji, i stąd o ścieżkę nie pytał. Fałszywy alarm.


"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 :]
edytowany 2x, ostatnio: MasterBLB, 2019-05-18 13:24

Pozostało 580 znaków

2019-05-18 14:12
0

Hmm...z tymi komponentami to mi nie wychodzi Bracie @Panczo. Działa jak zdefiniuję tak:

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

ale już przy takim układzie nie pokazuje komponentów, i nawet AlwaysShowComponentsList nie pomaga:

[Types]
Name "Core"; Description "Mech Designer required files";
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

"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 14:59
2

masz błąd w sekcji TYPES brakuje ci :, aby pokazać komponenty jeden musi mieć flagę iscustom:

[Setup]
AppName=4p
AppVersion=1
AlwaysShowComponentsList=yes
DefaultDirName={pf}\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
Pomogło, wielkie dzięki! - MasterBLB 2019-05-18 15:15

Pozostało 580 znaków

2019-05-18 15:52
0

A jeślibym chciał użyć

function GetOpenFileName(const Prompt: String; var FileName: String; const InitialDirectory, Filter, DefaultExtension: String): Boolean;

do znalezienia tej potrzebnej mi ścieżki dla plików z mech packa, to jak to zrobić @Panczo? Pewnie należałoby zdefiniować sobie jakąś zmienną, podobną do tych {sd} albo {pf}, i do niej zwrócić rezultat wywołania GetOpenFileName.


"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 17:17
2

Przetestuj:

[Setup]
AppName=4p
AppVersion=1
AlwaysShowComponentsList=yes
DefaultDirName={pf}\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;
procedure InitializeWizard;
begin
  battletechPage := CreateInputFilePage(wpSelectDir, 'battletech.exe', 'Wskaż ścieżkę do pliku battletech.exe',
    'Opis na formularzu');
  battletechPage.Add('battletech.exe', 'battletech.exe|battletech.exe', '.exe');
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 = battletechPage.ID then
  begin
    if battletechPage.Values[0] = '' then
     begin
      MsgBox('Plik musi zostać wybrany!', mbInformation, MB_OK);
      Result := False;
      end
     else
      begin
         //KOD JAK JEST OK
         msgbox(ExtractFileDir(battletechPage.Values[0]), mbInformation, MB_OK);
      End;
  end;
end;

function battletechDir(Param: String): String;
begin
  { Return the selected DataDir }
  Result := ExtractFileDir(battletechPage.Values[0]);
end;

Odwołujesz się do folderu przez {code:battletechDir}

Pozostało 580 znaków

2019-05-18 17:50
0

Olbrzymie dzięki Bracie @Panczo, to niemal to czego potrzebuję. Na własną rękę próbowałem dorobić sprawdzanie poprawności wybranej ścieżki, niestety nie do końca wyszło :/ Ponadto nie dostrzegam sposobu aby tą stronę wizarda instalacyjnego wyświetlać po wyborze komponentów pod warunkiem, że do instalacji wybrano Flashpoint mech pack.
Oto co mam:

[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;
procedure InitializeWizard;
begin
  battletechPage := CreateInputFilePage(wpSelectDir, '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');
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 = battletechPage.ID 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(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;

"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 :]
edytowany 2x, ostatnio: MasterBLB, 2019-05-18 17:54

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