» Najnowsze projekty

Strona Główna Tutoriale Niestandardowy instalator projektu.
Niestandardowy instalator projektu.
Redaktor: DarkCloud    Dodano: 16/05/2009 - 15:53
Witam, chciałbym przedstawić wam jak w prosty sposób możemy zrobić swój własny, profesjonalny instalator gry. Z góry też zaznaczam iż ten tutorial nie jest w pełni ukończony.


Najpierw krótkie objaśnienia:
Tekst ten jest głównie przeznaczony pod wersję XP RM'a, jednakże wystarczy trochę analizy kodu a będziemy mogli zrobić instalator do praktycznie każdej rzeczy.
"Gwiazdki":

*1 - Jeśli nie chcemy się babrać w kodzie i ustawiać dla każdego pliku ścieżki dostępu to najlepiej by nasz projekt był zakodowany. Zakodowanie projektu przynosi także inne zyski o których nie mam zamiaru już tu pisać. Tak czy siak gdy nasza gra/demo/cokolwiek będzie ukończone to najpierw musimy zrobić standardowy intalator w RM. Czyli wybieramy "File">"Compress Game Data...". A teraz Uwaga, zaznaczamy jeszczę "Create Encrypted Archive" i klikamy ok. Potem korzystamy z utworzenego przed chwilą instalatora i instalujemy grę w dowolny folder. Ten właśnie folder będzie naszym folderem z grą.
  1. Naszym pierwszym krokiem jest ściągnięcie tego oto cudeńka:
    http://puzzle.dl.sourceforge.net/sourceforge/nsis/nsis-2.40-setup.exe
    Czyli "Nullsoft Scriptable Install System", w skrócie NSIS.
  2. Następnie oczywiście instalujemy naszą zdobycz.
    Pod koniec instalacji, jeśli nic nie mąciliśmy to program powinien uruchomić się sam:
  3. Na razie zostawmy go w spokoju.
    Otwórzcie notatnik i wklejcie ten oto kod:
    instalator.nsi

    ;--------------------------------
    ; Written by DarkCloud
    ; Pobrano z: www.zamthir.net
    ;--------------------------------
     
    ;--------------------------------
    ; Include Modern UI
     
    !include "MUI2.nsh"
     
    ;--------------------------------
    ; General
     
    ; The name of the installer
    Name "Nazwa Gry"
     
    ; The file to write
    OutFile "Nazwa Gry.exe"
     
    ; The default installation directory
    InstallDir "$PROGRAMFILES\Nazwa Gry"
     
    ; Registry key to check for directory (so if you install again, it will 
    ; overwrite the old one automatically)
    InstallDirRegKey HKLM "Software\Nazwa Gry" "Install_Dir"
     
    ; Request application privileges for Windows Vista
    RequestExecutionLevel user
     
    ;--------------------------------
    ; Interface Configuration
     
    !define MUI_HEADERIMAGE
    !define MUI_HEADERIMAGE_BITMAP "${NSISDIR}\Contrib\Graphics\Header\nsis.bmp" ; optional
    !define MUI_ABORTWARNING
     
    ;--------------------------------
    ; Pages
     
    !insertmacro MUI_PAGE_WELCOME
    !insertmacro MUI_PAGE_LICENSE "License.txt"
    !insertmacro MUI_PAGE_COMPONENTS
    !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
    !define MUI_FINISHPAGE_RUN_NOTCHECKED
    !define MUI_FINISHPAGE_RUN_TEXT "Uruchom grÄ™."
    !define MUI_FINISHPAGE_RUN_FUNCTION "LaunchLink"
    !insertmacro MUI_PAGE_FINISH
     
    !insertmacro MUI_UNPAGE_WELCOME
    !insertmacro MUI_UNPAGE_CONFIRM
    !insertmacro MUI_UNPAGE_INSTFILES
    !insertmacro MUI_UNPAGE_FINISH
     
    ;--------------------------------
    ; Languages
     
    !insertmacro MUI_LANGUAGE "Polish"
     
    ;--------------------------------
    ; Installer Sections
     
    Section "Nazwa Gry" SecDummy
     
    SectionIn RO
     
    ; Set output path to the installation directory.
    SetOutPath $INSTDIR
     
    ; Put file there
    File "Game.exe" "Game.ini" "Game.rgssad"
     
    ; Write the installation path into the registry
    WriteRegStr HKLM "SOFTWARE\Nazwa Gry" "Install_Dir" "$INSTDIR"
     
    ; Write the uninstall keys for Windows
    WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Nazwa Gry" "DisplayName" "Nazwa Gry"
    WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Nazwa Gry" "UninstallString" 
     
    '"$INSTDIR\uninstall.exe"'
    WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Nazwa Gry" "NoModify" 1
    WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Nazwa Gry" "NoRepair" 1
    WriteUninstaller "uninstall.exe"
     
    SectionEnd
     
    ;--------------------------------
    ;Descriptions
     
    ;Language strings
    LangString DESC_SecDummy ${LANG_POLISH} "Pliki niezbędne do uruchomienia gry."
     
    ;Assign language strings to sections
    !insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN
    !insertmacro MUI_DESCRIPTION_TEXT ${SecDummy} $(DESC_SecDummy)
    !insertmacro MUI_FUNCTION_DESCRIPTION_END
     
    ;--------------------------------
    ; Optional section (can be disabled by the user)
     
    Section "Start Menu Shortcuts"
     
    CreateDirectory "$SMPROGRAMS\Nazwa Gry"
    CreateShortCut "$SMPROGRAMS\Nazwa Gry\Uninstall.lnk" "$INSTDIR\uninstall.exe" "" "$INSTDIR\uninstall.exe" 0
    CreateShortCut "$SMPROGRAMS\Nazwa Gry\Nazwa Gry.lnk" "$INSTDIR\Game.exe" "" "$INSTDIR\Game.exe" 0
     
    SectionEnd
     
    ;--------------------------------
    ; Optional section (can be disabled by the user)
     
    Section "Desktop Shortcut"
     
    CreateShortCut "$DESKTOP\Nazwa Gry.lnk" "$INSTDIR\Game.exe" "" "$INSTDIR\Game.exe" 0
     
    SectionEnd
     
    ;--------------------------------
    ; Uninstaller
     
    Section "Uninstall"
     
    ; Remove registry keys
    DeleteRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Nazwa Gry"
    DeleteRegKey HKLM SOFTWARE\Nazwa Gry
     
    ; Remove files and uninstaller
    Delete $INSTDIR\game.exe
    Delete $INSTDIR\game.ini
    Delete $INSTDIR\game.rgssad
    Delete $INSTDIR\uninstall.exe
     
    ; Remove shortcuts, if any
    Delete "$SMPROGRAMS\Nazwa Gry\*.*"
    Delete "$DESKTOP\Nazwa Gry.lnk"
     
    ; Remove directories used
    RMDir "$SMPROGRAMS\Nazwa Gry"
    RMDir "$INSTDIR"
     
    SectionEnd
     
    ;--------------------------------
    ; LaunchLink Function
     
    Function LaunchLink
    ExecShell "" "$INSTDIR\game.exe"
    FunctionEnd
     

    Następnie wybieramy "Plik"=>"Zapisz jako...", potem w "Zapisz jako typ:" zmieniamy na "Wszystkie pliki", a w "Nazwa pliku:" wklejamy to: "instalator.nsi".
    Na koniec oczywiście zapisujemy plik w dowolnie wybranym przez nas miejscu, np na pulpicie.
    Jeśli macie jakieś problemy z tym punktem to możecie ściągnąć "gotowca", który jest nieco niżej ^^".
  4. Ok, teraz otwieramy nasz folder z grą/projektem (projekt musi być już zakodowany*1).
    Powinny znajdować się tam 3 pliki (czasem jest ich więcej, np pliki Audio):
    "Game.exe","Game.ini" i "Game.rgssad".
    Do tego folderu wklejamy wcześniej utworzony plik "instalator.nsi".
  5. Teraz przywołujemy nasz wcześniej schowany program i klikamy w "Compile NSI Scripts".
    Powinnyśmy ujrzeć coś takiego:
  6. Wybieramy "File"=>"Load Script...", szukamy folder z naszÄ… grÄ… i otwieramy plik "instalator.nsi".
  7. Teraz zajmiemy się edycją treści instalatora.
    Naciskamy więc "Script"=>"Edit Script".
    A więc zaczynamy =D!:
    • ;--------------------------------
      ; General
       
      ; The name of the installer
      Name "Nazwa Gry"
       
      ; The file to write
      OutFile "Nazwa Gry.exe"
       
      ; The default installation directory
      InstallDir "$PROGRAMFILES\Nazwa Gry"
       
      ; Registry key to check for directory (so if you install again, it will 
      ; overwrite the old one automatically)
      InstallDirRegKey HKLM "Software\Nazwa Gry" "Install_Dir"
       
      ; Request application privileges for Windows Vista
      RequestExecutionLevel user
       

      ; The name of the installer
      Name "Nazwa Gry"
      Proste, "Nazwa Gry" to nazwa instalatora, najlepiej po prostu wpiszcie nazwÄ™ swojej gry.
      ; The file to write
      OutFile "Nazwa Gry.exe"
      Tutaj możemy zmienić nazwę pliku instalatora, który zostanie potem utworzony.
      The default installation directory
      InstallDir "$PROGRAMFILES\Nazwa Gry"
      Tu jak łatwo się domyślić wybieramy domyślne miejsce w którym ma być zainstalowana gra, "$PROGRAMFILES" to skrót do "X:\Program Files".
      Tu także zmieniamy "Nazwa gry" na cokolwiek chcemy.
      ; Registry key to check for directory (so if you install again, it will
      ; overwrite the old one automatically)
      InstallDirRegKey HKLM "Software\Nazwa Gry" "Install_Dir"
      Po prostu zmieńmy "Nazwa gry" na coś innego, dzięki tej linijce w rejestrze tworzony jest klucz który sprawdza czy gra aby przypadkiem nie jest już zainstalowana.
      ; Request application privileges for Windows Vista
      RequestExecutionLevel user
      Tutaj możemy zmienić "user" na "admin", wtedy aby zainstalować grę użytkownik będzie musiał posiadać prawa administratora systemu.
    • ;--------------------------------
      ; Interface Configuration
       
      !define MUI_HEADERIMAGE
      !define MUI_HEADERIMAGE_BITMAP "${NSISDIR}\Contrib\Graphics\Header\nsis.bmp" ; optional
      !define MUI_ABORTWARNING
       

      !define MUI_HEADERIMAGE_BITMAP "${NSISDIR}\Contrib\Graphics\Header\nsis.bmp" ; optional
      W tej linijce możemy zmienić ten oto obrazek:

      na jakikolwiek inny. Pamiętajmy jednak że musi on mieć wymiary 150x57 px.
      Dla przykładu logo TSoT'a:

      "${NSISDIR}" to ścieżka do miejsca w którym zainstalowaliśmy jest NSIS.
      Powiedzmy że posiadamy obrazek o nazwie "logo.bmp" na pulpicie, wtedy linijka z tym kodem powinna wyglądać tak:
      !define MUI_HEADERIMAGE_BITMAP "$DESKTOP\logo.bmp"
       
    • ;--------------------------------
      ; Pages
       
      !insertmacro MUI_PAGE_WELCOME
      !insertmacro MUI_PAGE_LICENSE "License.txt"
      !insertmacro MUI_PAGE_COMPONENTS
      !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
      !define MUI_FINISHPAGE_RUN_NOTCHECKED
      !define MUI_FINISHPAGE_RUN_TEXT "Uruchom grÄ™."
      !define MUI_FINISHPAGE_RUN_FUNCTION "LaunchLink"
      !insertmacro MUI_PAGE_FINISH
       
      !insertmacro MUI_UNPAGE_WELCOME
      !insertmacro MUI_UNPAGE_CONFIRM
      !insertmacro MUI_UNPAGE_INSTFILES
      !insertmacro MUI_UNPAGE_FINISH
       

      !insertmacro MUI_PAGE_LICENSE "License.txt"
      Ścieżka do pliku ".txt" licencji programu. Tylko trzeba ją jeszcze stworzyć...
      Także otwórzcie notatnik i do dzieła (...)!
      Gdy skończycie to zapiszcie waszą prace waszą pracę jako plik "Licence.txt" w folderze z grą.
      Jeśli nie macie pomysłu na licencje, bądź jest wam zbędna to wtedy po prostu usuńcie tą linijkę.
      !define MUI_FINISHPAGE_RUN_TEXT "Uruchom grÄ™."
      Tu możemy jeszcze zmienić "Uruchom grę." na cokolwiek innego, tekst ten jest wyświetlany pod koniec instalacji.
    • ;--------------------------------
      ; Installer Sections
       
      Section "Nazwa Gry" SecDummy
       
      SectionIn RO
       
      ; Set output path to the installation directory.
      SetOutPath $INSTDIR
       
      ; Put file there
      File "Game.exe" "Game.ini" "Game.rgssad"
       
      ; Write the installation path into the registry
      WriteRegStr HKLM "SOFTWARE\Nazwa Gry" "Install_Dir" "$INSTDIR"
       
      ; Write the uninstall keys for Windows
      WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Nazwa Gry" "DisplayName" "Nazwa Gry"
      WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Nazwa Gry" "UninstallString" 
       
      '"$INSTDIR\uninstall.exe"'
      WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Nazwa Gry" "NoModify" 1
      WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Nazwa Gry" "NoRepair" 1
      WriteUninstaller "uninstall.exe"
       
      SectionEnd
       

      Section "Nazwa Gry" SecDummy
      "Nazwa gry" - to nazwa głównego komponentu instalacji (czyli naszej gry). Jak zwykle najlepiej jakby to była nazwa naszej gry.
      ; Put file there
      File "Game.exe" "Game.ini" "Game.rgssad"
      Tu jak widać są podane pliki które instalator ma "zakodować" w sobie.
      ; Write the installation path into the registry
      WriteRegStr HKLM "SOFTWARE\Nazwa Gry" "Install_Dir" "$INSTDIR"

      ; Write the uninstall keys for Windows
      WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Nazwa Gry" "DisplayName" "Nazwa Gry"
      WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Nazwa Gry" "UninstallString"

      '"$INSTDIR\uninstall.exe"'
      WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Nazwa Gry" "NoModify" 1
      WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Nazwa Gry" "NoRepair" 1
      WriteUninstaller "uninstall.exe"
      Tutaj po prostu pozmieniajcie wszędzie "Nazwa Gry" na to samo co wpisaliście w:
      ; Registry key to check for directory (so if you install again, it will
      ; overwrite the old one automatically)
      InstallDirRegKey HKLM "Software\[b]Nazwa Gry[/b]" "Install_Dir"
    • ;--------------------------------
      ;Descriptions
       
      ;Language strings
      LangString DESC_SecDummy ${LANG_POLISH} "Pliki niezbędne do uruchomienia gry."
       
      ;Assign language strings to sections
      !insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN
      !insertmacro MUI_DESCRIPTION_TEXT ${SecDummy} $(DESC_SecDummy)
      !insertmacro MUI_FUNCTION_DESCRIPTION_END
       

      Ta część kodu odpowiada za "Opis" komponentów instalacji.
      Jako że jest to raczej zbędna rzecz, opis ten posiada więc jedynie głowny komponent - gra.
    • ;--------------------------------
      ; Optional section (can be disabled by the user)
       
      Section "Start Menu Shortcuts"
       
      CreateDirectory "$SMPROGRAMS\Nazwa Gry"
      CreateShortCut "$SMPROGRAMS\Nazwa Gry\Uninstall.lnk" "$INSTDIR\uninstall.exe" "" "$INSTDIR\uninstall.exe" 0
      CreateShortCut "$SMPROGRAMS\Nazwa Gry\Nazwa Gry.lnk" "$INSTDIR\Game.exe" "" "$INSTDIR\Game.exe" 0
       
      SectionEnd
       

      Section "Start Menu Shortcuts"
      "Start Menu Shortcuts" - to nazwa komponentu odpowiedzialnego za dodanie skrótu do gry w menu start.
      CreateDirectory "$SMPROGRAMS\Nazwa Gry"
      "Nazwa Gry" - to nazwa folderu gry w menu start.
      CreateShortCut "$SMPROGRAMS\Nazwa Gry\Uninstall.lnk" "$INSTDIR\uninstall.exe" "" "$INSTDIR\uninstall.exe" 0
      Zmieniamy "Nazwa Gry" na nazwę folderu którą wpisaliśmy powyżej.
      CreateShortCut "$SMPROGRAMS\Nazwa Gry\Nazwa Gry.lnk" "$INSTDIR\Game.exe" "" "$INSTDIR\Game.exe" 0
      To samo, tyle że "Nazwa Gry.lnk" to nazwa skrótu do naszej gry, nazwa ta może być dowolna.
    • ;--------------------------------
      ; Optional section (can be disabled by the user)
       
      Section "Desktop Shortcut"
       
      CreateShortCut "$DESKTOP\Nazwa Gry.lnk" "$INSTDIR\Game.exe" "" "$INSTDIR\Game.exe" 0
       
      SectionEnd
       

      Section "Desktop Shortcut"
      "Desktop Shortcut" - to nazwa komponentu odpowiedzialnego za dodawanie skrótu na pulpicie.
      CreateShortCut "$DESKTOP\Nazwa Gry.lnk" "$INSTDIR\Game.exe" "" "$INSTDIR\Game.exe" 0
      "Nazwa Gry.lnk" - to nazwa skrótu który będzie utworzony na pulpicie.
    • ;--------------------------------
      ; Uninstaller
       
      Section "Uninstall"
       
      ; Remove registry keys
      DeleteRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Nazwa Gry"
      DeleteRegKey HKLM SOFTWARE\Nazwa Gry
       
      ; Remove files and uninstaller
      Delete $INSTDIR\game.exe
      Delete $INSTDIR\game.ini
      Delete $INSTDIR\game.rgssad
      Delete $INSTDIR\uninstall.exe
       
      ; Remove shortcuts, if any
      Delete "$SMPROGRAMS\Nazwa Gry\*.*"
      Delete "$DESKTOP\Nazwa Gry.lnk"
       
      ; Remove directories used
      RMDir "$SMPROGRAMS\Nazwa Gry"
      RMDir "$INSTDIR"
       
      SectionEnd
       

      ; Remove registry keys
      DeleteRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Nazwa Gry"
      DeleteRegKey HKLM SOFTWARE\Nazwa Gry
      Tutaj "Nazwa Gry" zmieniamy na to samo co wpisaliśmy w:
      ; Write the installation path into the registry
      WriteRegStr HKLM "SOFTWARE\Nazwa Gry" "Install_Dir" "$INSTDIR"

      ; Write the uninstall keys for Windows
      WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\[b]Nazwa Gry[/b]" "DisplayName" "[b]Nazwa Gry[/b]"
      WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\[b]Nazwa Gry[/b]" "UninstallString"

      '"$INSTDIR\uninstall.exe"'
      WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\[b]Nazwa Gry[/b]" "NoModify" 1
      WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\[b]Nazwa Gry[/b]" "NoRepair" 1
      WriteUninstaller "uninstall.exe"
      oraz
      ; Registry key to check for directory (so if you install again, it will
      ; overwrite the old one automatically)
      InstallDirRegKey HKLM "Software\[b]Nazwa Gry[/b]" "Install_Dir"
      Na koniec:
      ; Remove shortcuts, if any
      Delete "$SMPROGRAMS\Nazwa Gry\*.*"
      Delete "$DESKTOP\Nazwa Gry.lnk"

      ; Remove directories used
      RMDir "$SMPROGRAMS\Nazwa Gry"
      RMDir "$INSTDIR"
      "Nazwa Gry" zmieniamy na to co wpisaliśmy przy nazwie folderu menu start gry, a do "Nazwa Gry.lnk" wklejamy poprzednio wpisaną nazwę skrótu na pulpicie.
  8. Okey jakoś przebrnęliśmy przez to. Teraz zapisujemy zmiany i zamykamy notatnik.
  9. Na koniec wybieramy "Script"=>"Recompile" i jeśli nic nie zepsuliśmy to możemy przetestować instalator klikając na "Test Installer".

To wszystko!
Jak widać stworzenie własnego instalatora wcale nie jest trudną rzeczą. =]
Za jakiÅ› czas przedstawiÄ™ wam jeszcze dodatkowe informacje dotyczÄ…ce nieco bardziej zaawansowanej edycji instalatora.
Pozdrawiam, DC.