Instalatory
Adam Boduch
Temat instalatorów jest bardzo ciekawy. Bo któż nie chciałby mieć własnego instalatora? Pewnie każdy. W tym artykule przedstawię proces pisania instalatora bez wykorzystania dodatkowych komponentów. Nie będzie to instalator w stylu "Install Shield", ale taki na własny użytek, do własnych celów.
Zacznijmy więc. Wygląd samego instalatora zależy już od Ciebie i od Twojego gustu. Oczywiście nasz instalator ma być w jednym pliku tak żeby nasz instalowany program "odklejał" się od EXEka i zapisywał w wybranym przez użytkownika katalogu.
Pewnie największym problemem było włączenie samego pliku do EXEka, prawda?
Krok 1. Dołączanie plików
Przygotuj sobie najpierw jakiś katalog - załóżmy "Setup". Tam skopiuj pliki, które chcesz włączyć do EXEka. Ja w swoim przykładzie włączam tylko jeden plik wykonywalny EXE. Naszym celem będzie stworzenie zasobu zawierającego właśnie plik EXE, który chcesz zainstalować. W przykładzie, który podaje plik dołączony do zasobów nazywać się będzie "Pad.exe". Najpierw stwórz plik tekstowy z zmień jego rozszerzenie na *.rc ( np. files.rc ). W Notatniku dopisz taką linię:PAD RCDATA "Pad.exe"
Pierwszy człon to nazwa programu, drugi to typ pliku - w tym wypadku jest to program, a ostatni człon podany w cudzysłowach to nazwa pliku wykonywalnego - w moim przypadku jest to "Pad.exe". Zapisz cały plik. Jeżeli posiadasz Delphi to z pewnością program "brcc32.exe". Znajduje się on w katalogu ...Delphi\Bin. Skopiuj go do katalogu z Twoimi plikami ( tam gdzie masz plik *.rc ).
Jest to program DOS-owy więc musisz uruchomić go z okienka MS -DOS. Ten program przekształci plik *.rc na *.res.
Odpal więc okienko MS - DOS-a i przejdź do katalogu z plikiem *.rc oraz z programem "brcc32.exe". W DOS-ie do katalogów przechodzi się poleceniem:
cd NazwaKatalogu
Jeżeli chcesz przejść o katalog wyżej to stosujesz polecenie:
cd..
A więc jeżeli już jesteś w tym katalogu to wpisz taką linię i wciśnij ENTER:
brcc32.exe files.rc
"Files.rc" to nazwa Twojego zasobu. Jeżeli wszystko pójdzie dobrze to obok pliku *.rc powinieneś ujrzeć plik z rozszerzeniem *.res.( w moim przypadku jest to plik o nazwie "files.RES". ). Gratulacje! Właśnie stworzyłeś zasób, który zawiera Twój plik EXE. Jest on zapewne dość duży ( w moim przypadku zajmuje 250 kB ).
Krok 2. Tworzenie instalatora
Teraz musisz w Delphi zrobić instalator. Postaw parę komponentów, walnij jakiś napis.Krok 3. Wyciągnięcie programu z EXE-ka
Gdzieś w kodzie Twojego instalatora umieść taką linię:{$R FILES.RES}
"Files.res" to Twoja nazwa zasobu. Od tej pory zasoby te są włączone do instalatora.
Pozostało jeszcze napisanie samej procedury, która wyciągnie z zasobów program i zapisze go gdzieś na dysku:
Wygląda ona tak:
var
Res : TResourceStream;
begin
Res:=TResourceStream.Create(hInstance, 'PAD', RT_RCDATA);
Res.SaveToFile('Pad.exe');
Res.Free;
Pierwsza linia powoduje stworzenie zasobu i wyciągnięcie z niego Twojego programu, kolejna zapisuje go na dysku, a ostatnia zwalnia pamięć.
To wszystko!
A z tymi folderami to możesz wpakować wszystkie pliki które chcesz wrzucić, a potem w jakimś wątku najpierw stworzyć folder funkcją
CreateDirectory();
i dopiero potem wrzucać pliki do tego folderu.
Ja to {$ plik.RES} daje zawsze w sekcji interface, zaraz przed słowem implementation,i zaraz po deklaracji globalnych zmiennych i stałych.
Witajcie. Postaram się opisać problemy. Więc:
{$R FILES.RES}
dajemy pod
{$R *.dfm}
Plik *.rc i *.rec dajemy do delphi7/bin.
Powinno działać.
A teraz moje pytanie:
Jak już wspominałem, plik *.rc i *.rec kopiujemy do pliku w delphi. Mi ładnie działa program, jeżeli odpalam go przez delphi. Jeżeli już stworzę "Project" lub odpalę program na innym komputerze to wyskakuje błąd:
"resource cos not found"
Jak zrobić, aby ten plik *.rec można było odczytać nawet, jeżeli nie jest w folderze w delphi?
Pozdrawiam
Wowol
tomalla, nie da się folderów dodawać, ale zawsze można spakować zipem a potem jakimś komponentem zdekompresować
Super... Właśnie myślałem o instalatorze. Wkrótce w dziale Download znajdziecie nową wersję mojej przeglądarki internetowej z instalatorem :)
znaczy przestało ...
a mi działało, ale później także nie przestało działać :P
u mnie nie czyta pliku files pomórzcie
A jak do *.rc dodawać foldery?
A jak do *.rc dodawać nie pliki, tylko foldery, z plikami?
A nie lepiej byłoby zrobić tak:
Napisać instalator który by tylko kopiował?
To by było tak:
edit i button - w edicie wpisuje sie ścieżke, button kopiuje plik do miejsca gdzie prowadzi ścieżka.
Ale żeby t było w jednym pliku trzeba spakować to np. winrarem:
Wykonalny plik,
rozpakować do tempa,
po rozpakowaniu uruchomić instalator.
A nie lepiej byłoby zrobić tak:
Napisać instalator który by tylko kopiował?
To by było tak:
edit i button - w edicie wpisuje sie ścieżke, button kopiuje plik do miejsca gdzie prowadzi ścieżka.
Ale żeby t było w jednym pliku trzeba spakować to np. winrarem:
Wykonalny plik,
rozpakować do tempa,
po rozpakowaniu uruchomić instalator.
po uses wpisz linijke
const
{tu trzeba cos wpisac bo mi zawsze wywala blad wiec wpisuje np.}
A='cus zbednego';
{$R FILES.RES}
i gra muza :D
u mnie jak che wyjąć plik z zasobu, to mi wyskakuje "resource AKTUALIZACJA not found". Co robić?
mi wszystko działa super
a jak zrobić zeby uzytkownik sam mógł podać miejsce gdzie chce zainstalować program ?? aha i jak dodać np do instalatora np.ikonke jakąś chodzi mi oto ze oprucz pad.exe dodać jeszcze ikona.ico ??
Ja korzystam z Delphi 3 i brcc32.exe skopiowany do innego katalogu nie przetwarza pliku *.rc na *.res, ale gdy w moim folderze utworzę sobie skrót do brcc32 i przeciągnę na niego plik *.rc - tak jak to podał poprzednik - wtedy gra muzyka.
Ale po co bawić się w uruchamianie brcc32.exe z DOS-a? Wystarczy przeciągnąć plik *.rc nad ikonę programu i gotowe!
Juz wiem o co chodzi:
zamiast w files.rc
PAD RCDATA "Pad.exe"
trzeba uzyc
PAD RCDATA "Pad.exe"
Wynika to z tego, zeby php tych cudzyslowow zle nie potraktowalo, to Boduch tak napisal ;)
U mnie wyskakuje identyczny komunikat. Ja mam Windows 2000. Moze cos z kodem jest nie tak...
A u mnie wyskakuje takie coś w dosie:
[size=18]Fatal error Bad character in source input[/size]
i nie wiem co zrobić. Może to dlatego, że mam Windowsa XP.
Jest jeszcze jedna sprawa dotycząca instalatorów - każda porządna aplikacja zapisuje swoje informacje w rejestrze - powinieneś tu gdzieś o tym wspomnieć, a poza tym bardzo się przyda :P
Genialnie stary chociaz nie robie instalatora to ratujesz mi zycie :P
Panie Johny:
jeśli chcesz to "przekompilować" trzeba wpisać:
brcc32.exe files.txt
U mnie tak działa!
A nie już wiem o co chodzi :
tszeba małymi literami napisać :)
A mi wyskokuje błąd przy kompilacji:
Error file not found files.res
Mam zainstalowanego Delphi 7 a w katalogu bin nie mam takie pliku jak brcc32.exe Mógłby mi ktoś przesłać ten plik na email piter@lotnisko.net
pod implemenation
"Gdzieś w kodzie Twojego instalatora umieść taką linię:" Gdzieś dokładniej pod uses:P