Pobieranie prezentacji. Proszę czekać

Pobieranie prezentacji. Proszę czekać

1 Wykład 9 PROGNOZOWANIE WŁAŚCIWOŚCI MATERIAŁÓW Inżynieria Materiałowa METODOLOGIA TWORZENIA APLIKACJI KOMPUTEROWYCH II SSIPODSTAWY INŻYNIERII OPROGRAMOWANIAII.

Podobne prezentacje


Prezentacja na temat: "1 Wykład 9 PROGNOZOWANIE WŁAŚCIWOŚCI MATERIAŁÓW Inżynieria Materiałowa METODOLOGIA TWORZENIA APLIKACJI KOMPUTEROWYCH II SSIPODSTAWY INŻYNIERII OPROGRAMOWANIAII."— Zapis prezentacji:

1 1 Wykład 9 PROGNOZOWANIE WŁAŚCIWOŚCI MATERIAŁÓW Inżynieria Materiałowa METODOLOGIA TWORZENIA APLIKACJI KOMPUTEROWYCH II SSIPODSTAWY INŻYNIERII OPROGRAMOWANIAII SSI Dr hab. inż. Barbara Dębska, prof. PWSZ Podstawy Inżynierii Oprogramowania WYKŁAD 9 Dr hab. inż. Barbara Dębska, prof. PWSZ Modele cyklu życia oprogramowania MODEL KASKADOWY Faza Instalacji Implementacja Własnego Instalatora

2 2 Wykład 9 PROGNOZOWANIE WŁAŚCIWOŚCI MATERIAŁÓW Inżynieria Materiałowa METODOLOGIA TWORZENIA APLIKACJI KOMPUTEROWYCH II SSIPODSTAWY INŻYNIERII OPROGRAMOWANIAII SSI Dr hab. inż. Barbara Dębska, prof. PWSZ Określenie wymagań ProjektowanieImplementacjaTestowanieKonserwacja Faza strategiczna Analiza Instalacja Dokumentacja Instalacja FAZA INSTALACJI

3 3 Wykład 9 PROGNOZOWANIE WŁAŚCIWOŚCI MATERIAŁÓW Inżynieria Materiałowa METODOLOGIA TWORZENIA APLIKACJI KOMPUTEROWYCH II SSIPODSTAWY INŻYNIERII OPROGRAMOWANIAII SSI Dr hab. inż. Barbara Dębska, prof. PWSZ Na fazę instalacji składa się: szkolenie użytkowników końcowych i administratorów systemu, instalacja sprzętu i przeniesienie oprogramowania, wypełnienie baz danych, nadzorowanie korzystania z systemu, często równoległe z tradycyjnym sposobem pracy, usuwanie błędów w oprogramowaniu i dokumentacji użytkowej, przekazanie systemu klientowi. Faza instalacji dotyczy oprogramowania wytwarzanego na zamówienie lub dostarczanego komercyjnie. W trakcie instalacji następuje przekazanie systemu użytkownikowi, który w momencie jej zakończenia stanie się właścicielem systemu.

4 4 Wykład 9 PROGNOZOWANIE WŁAŚCIWOŚCI MATERIAŁÓW Inżynieria Materiałowa METODOLOGIA TWORZENIA APLIKACJI KOMPUTEROWYCH II SSIPODSTAWY INŻYNIERII OPROGRAMOWANIAII SSI Dr hab. inż. Barbara Dębska, prof. PWSZ Cechy osób przeprowadzających szkolenia użytkowników: znacznie łatwiej nawiązują oni kontakt z uczestnikami szkoleń, posługują się językiem zrozumiałym dla uczestników szkoleń, powinni być przygotowani na opór ze strony szkolonych przedstawicieli klienta, związany ze zmianą sposobu pracy, powinni starać się o uzyskanie akceptacji osób, które po raz pierwszy zetknęły się z systemem, mogą korzystać ze wsparcia tych przedstawicieli klienta, z którymi współ- pracowali w fazie określania wymagań i w fazie analizy (mają oni zazwyczaj lepsze przygotowanie informatyczne i znacznie lepiej są nastawieni do instalowanego systemu). Szkolenie użytkowników powinno być wykonywane przez osoby, które były zaangażowane w prowadzenie przedsięwzięcia.

5 5 Wykład 9 PROGNOZOWANIE WŁAŚCIWOŚCI MATERIAŁÓW Inżynieria Materiałowa METODOLOGIA TWORZENIA APLIKACJI KOMPUTEROWYCH II SSIPODSTAWY INŻYNIERII OPROGRAMOWANIAII SSI Dr hab. inż. Barbara Dębska, prof. PWSZ Podczas instalacji może pojawić się szereg problemów i instalacja może zająć wiele miesięcy. Przykłady problemów: Środowisko, w którym system ma być zainstalowany, jest inne niż to, które założyli twórcy systemu. Może to skutkować tym, że niektóre funkcje SO działają inaczej. Potencjalni użytkownicy systemu mogą nie być przekonani o konieczności jego wprowadzenia w firmie. System może zmniejszyć zakres ich odpowiedzialności i ludzie mogą rozmyślnie odmówić współpracy z instalatorami systemu, np. mogą sprzeciwić się udostępnieniu podstawowych informacji dla procesu instalacji. Nowy system ma koegzystować z istniejącym systemem do czasu przekonania firmy, że nowy system pracuje poprawnie. Sprawia to trudności, jeśli oba systemy nie są całkiem niezależne, np. współdzielą pewne zasoby. Niekiedy instalacja nowego systemu jest niemożliwa bez usunięcia starego. Mogą wystąpić fizyczne problemy z instalacją, np. nie ma miejsca na położenie kabli sieciowych bo budynek jest zabytkowy i wszelkie przebudowy są zakazane. W trakcie instalacji system jest umieszczany w środowisku, w którym ma działać.

6 6 Wykład 9 PROGNOZOWANIE WŁAŚCIWOŚCI MATERIAŁÓW Inżynieria Materiałowa METODOLOGIA TWORZENIA APLIKACJI KOMPUTEROWYCH II SSIPODSTAWY INŻYNIERII OPROGRAMOWANIAII SSI Dr hab. inż. Barbara Dębska, prof. PWSZ Główny czynnik wpływający na sukces fazy instalacji: właściwe planowanie i harmonogramowanie zadań, które zapewni szybki przebieg instalacji, przy jednoczesnym niezakłócaniu innych prac klienta i producenta. Planowanie i harmonogramowanie zadań jest szczególnie ważne w fazie instalacji, gdyż: - pojawia się szereg problemów technicznych oraz konieczność szybkiego usunięcia zauważonych błędów, - analitycy, projektanci i programiści systemu muszą być na bieżąco dostępni (ale nie mogą całego swojego czasu rezerwować na prace związane z instalacją), - w rozwiązywaniu niektórych problemów występujących w trakcie instalacji muszą uczestniczyć użytkownicy (ale nie mogą oni zaniechać wykonywania innych swoich podstawowych zadań), - operatorzy muszą mieć czas na przyzwyczajenie się do nowego systemu, aby nie myliły im się polecenia dostępne w różnych interfejsach użytkownika.

7 7 Wykład 9 PROGNOZOWANIE WŁAŚCIWOŚCI MATERIAŁÓW Inżynieria Materiałowa METODOLOGIA TWORZENIA APLIKACJI KOMPUTEROWYCH II SSIPODSTAWY INŻYNIERII OPROGRAMOWANIAII SSI Dr hab. inż. Barbara Dębska, prof. PWSZ Czynnością wykonywaną podczas fazy instalacji jest wypełnianie baz danych. Dane mogą się znajdować na nośniku papierowym lub mogą być przygotowane w formie elektronicznej, ale dla innego oprogramowania i przeniesienie danych może być trudne. Niezbędna może się okazać konieczność zbudowania dodatkowego oprogramowania służącego do konwersji danych (należy taki fakt uzgodnić wcześniej i przewidzieć koszty budowy koniecznego oprogramowania): (1) Obecnie stosowane standardy dostępu do baz danych ułatwiają konwersję bazy danych (2) Konwersja danych będzie łatwiejsza, jeżeli klient dostarczy, uzyskaną od dostawcy poprzedniego systemu, specyfikację struktury bazy danych.

8 8 Wykład 9 PROGNOZOWANIE WŁAŚCIWOŚCI MATERIAŁÓW Inżynieria Materiałowa METODOLOGIA TWORZENIA APLIKACJI KOMPUTEROWYCH II SSIPODSTAWY INŻYNIERII OPROGRAMOWANIAII SSI Dr hab. inż. Barbara Dębska, prof. PWSZ Podsumowanie Czynniki wpływające na sukces fazy instalacji: właściwe planowanie i harmonogramowanie zadań, zapewniające szybki przebieg instalacji przy jednoczesnym niezakłócaniu innych prac klienta i producenta, uzyskanie wstępnej pozytywnej reakcji użytkowników, oraz właściwe przygotowanie osób przeprowadzających szkolenia. Podstawowe rezultaty fazy instalacji: poprawiony kod, projekt, model i specyfikacja wymagań, oraz oprogramowanie zainstalowane u użytkownika.

9 9 Wykład 9 PROGNOZOWANIE WŁAŚCIWOŚCI MATERIAŁÓW Inżynieria Materiałowa METODOLOGIA TWORZENIA APLIKACJI KOMPUTEROWYCH II SSIPODSTAWY INŻYNIERII OPROGRAMOWANIAII SSI Dr hab. inż. Barbara Dębska, prof. PWSZ Zadania typowego instalatora: tworzenie katalogów roboczych instalowanego programu w wybranym katalogu systemu, kopiowanie plików instalacyjnych do wybranych katalogów roboczych, nadawanie skopiowanym plikom właściwych atrybutów i praw dostępu, tworzenie skrótów w menu start i skrótów na pulpicie z uwzględnieniem kont użytkowników, tworzenie wpisów w gałęzi Software Rejestru Windows z ustawieniami instalowanego programu, rejestrowanie formatów plików oraz akcji z nimi związanych w gałęzi Classes Rejestru Windows, oraz rejestrowanie deinstalatora w gałęzi Uninstall Rejestru Windows. Implementacja własnego Instalatora

10 10 Wykład 9 PROGNOZOWANIE WŁAŚCIWOŚCI MATERIAŁÓW Inżynieria Materiałowa METODOLOGIA TWORZENIA APLIKACJI KOMPUTEROWYCH II SSIPODSTAWY INŻYNIERII OPROGRAMOWANIAII SSI Dr hab. inż. Barbara Dębska, prof. PWSZ Schemat typowego procesu instalacyjnego Start Powitanie – informacje startowe Wyświetlenie treści licencji Wybór domyślnego katalogu instalacji Wybór domyślnego folderu w Menu Start Gotowość do rozpoczęcia instalacji Wyświetlanie nazw instalowanych plików i stopnia postępu instalacji Wyświetleniu komunikatu o poprawnym zakończeniu instalacji Stop Zmiana nazwy katalogu Zmiana nazwy folderu Anulowanie instalacji Czy akceptujesz licencję? N T Czy zmienić katalog? T N Czy zmienić folder? T T

11 11 Wykład 9 PROGNOZOWANIE WŁAŚCIWOŚCI MATERIAŁÓW Inżynieria Materiałowa METODOLOGIA TWORZENIA APLIKACJI KOMPUTEROWYCH II SSIPODSTAWY INŻYNIERII OPROGRAMOWANIAII SSI Dr hab. inż. Barbara Dębska, prof. PWSZ Kolejność występowania etapów instalacyjnych Całkowity czas instalacji 1 2 3 4 5 7 8 9 10 11 t1t1 t2t2 t3t3 t4t4 t5t5 t6t6 t7t7 t8t8 t9t9 t 10 t 11 Start instalatora Zmiana nazwy katalogu roboczego Zmiana nazwy folderu w Menu Start Kopiowanie plików instalacyjnych Tworzenie skrótów do programu Tworzenie wpisów w Rejestrze Windows Rejestrowanie formatów plików oraz deinstalatora Zakończenie pracy instalatora - sprzątanie po instalacji 6 Wyświetleniepowitania Wyświetlenie licencji Wyświetlenie zadanych ustawień instalatora

12 12 Wykład 9 PROGNOZOWANIE WŁAŚCIWOŚCI MATERIAŁÓW Inżynieria Materiałowa METODOLOGIA TWORZENIA APLIKACJI KOMPUTEROWYCH II SSIPODSTAWY INŻYNIERII OPROGRAMOWANIAII SSI Dr hab. inż. Barbara Dębska, prof. PWSZ Narzędzia potrzebne do implementowania instalatora Do implementacji instalatorów najwygodniej jest użyć dowolnego środowiska IDE (Integrated Development Environment). Dla systemu Windows może to być jedno z następujących środowisk: NarzędzieJęzykProducent/Autor DelphiObject PascalBorland C++ BuilderC++Borland C# BuilderC#Borland JBuilderJavaBorland C++ BuilderXC++Borland Visual C++C++Microsoft Visual C#C#Microsoft Visual Age for C++C++IBM Visual Age for JavaJavaIBM Forte C++C++SUN Microsystems Forte JavaJavaSUN Microsystems Watcom C++C++Watcom FreePascal EditorObject PascalMorten Juel Skovrup DevPascalObject PascalBloodshed Software DevC++C++Bloodshed Software MinGW Developer StudioC++ Manu B. Visual MinGWC++Parinya Tripchart SharpDevelopC# i C++IC SharpCode Wszystkie z nich pozwalają stosować funkcje API (Application Programming Interface) systemu Windows. komercyjne freeware

13 13 Wykład 9 PROGNOZOWANIE WŁAŚCIWOŚCI MATERIAŁÓW Inżynieria Materiałowa METODOLOGIA TWORZENIA APLIKACJI KOMPUTEROWYCH II SSIPODSTAWY INŻYNIERII OPROGRAMOWANIAII SSI Dr hab. inż. Barbara Dębska, prof. PWSZ Przykładowy instalator utworzony w Delphi. Okna instalatora zaprojekto- wano wizualnie. Ekran widoczny obok przed- stawia program instalator na etapie projektowania. Widok projektu typowego instalatora

14 14 Wykład 9 PROGNOZOWANIE WŁAŚCIWOŚCI MATERIAŁÓW Inżynieria Materiałowa METODOLOGIA TWORZENIA APLIKACJI KOMPUTEROWYCH II SSIPODSTAWY INŻYNIERII OPROGRAMOWANIAII SSI Dr hab. inż. Barbara Dębska, prof. PWSZ Okno główne instalatora Widok okna głównego instalatora Przykładowy kod obecny w module okna głównego instalatora. procedure TMainForm.FormCreate(Sender: TObject); begin {start instalatora} FCloseWindows := False; FSetupBreak := False; MainForm.Width := Screen.Width - 0; MainForm.Height := Screen.Height - 28; MainForm.Left := 0; MainForm.Top := 0; WizardView := True; Label2.Top := Panel1.Height - 96; Label5.Top := Panel1.Height - 92; Label3.Top := Panel1.Height - 56; Label6.Top := Panel1.Height - 52; end; procedure TMainForm.FormPaint(Sender: TObject); begin {wyświetlenie okna kreatora instalacji} if WizardView = True then begin WizardView := False; Application.CreateForm(TWizardDialog, WizardDialog); WizardDialog.Show; end; procedure TMainForm.FormCreate(Sender: TObject); begin {start instalatora} FCloseWindows := False; FSetupBreak := False; MainForm.Width := Screen.Width - 0; MainForm.Height := Screen.Height - 28; MainForm.Left := 0; MainForm.Top := 0; WizardView := True; Label2.Top := Panel1.Height - 96; Label5.Top := Panel1.Height - 92; Label3.Top := Panel1.Height - 56; Label6.Top := Panel1.Height - 52; end; procedure TMainForm.FormPaint(Sender: TObject); begin {wyświetlenie okna kreatora instalacji} if WizardView = True then begin WizardView := False; Application.CreateForm(TWizardDialog, WizardDialog); WizardDialog.Show; end;

15 15 Wykład 9 PROGNOZOWANIE WŁAŚCIWOŚCI MATERIAŁÓW Inżynieria Materiałowa METODOLOGIA TWORZENIA APLIKACJI KOMPUTEROWYCH II SSIPODSTAWY INŻYNIERII OPROGRAMOWANIAII SSI Dr hab. inż. Barbara Dębska, prof. PWSZ Okno kreatora – wyświetlanie informacji powitalnych procedure TWizardDialog.ButtonPrevClick(Sender: TObject); begin {cofnij} ClickCount := ClickCount - 1; Notebook1.PageIndex := ClickCount; if ClickCount = 0 then ButtonPrev.Enabled := False; if ClickCount < 8 then begin ButtonNext.Enabled := True; ButtonInstall.Enabled := False; end; {zablokowanie timer'a i odblokowanie przycisku "Next" po cofnięciu się do kartki 1} if Notebook1.PageIndex < 2 then begin ButtonNext.Enabled := True; Timer1.Enabled := False; end; procedure TWizardDialog.ButtonPrevClick(Sender: TObject); begin {cofnij} ClickCount := ClickCount - 1; Notebook1.PageIndex := ClickCount; if ClickCount = 0 then ButtonPrev.Enabled := False; if ClickCount < 8 then begin ButtonNext.Enabled := True; ButtonInstall.Enabled := False; end; {zablokowanie timer'a i odblokowanie przycisku "Next" po cofnięciu się do kartki 1} if Notebook1.PageIndex < 2 then begin ButtonNext.Enabled := True; Timer1.Enabled := False; end; procedure TWizardDialog.ButtonNextClick(Sender: TObject); var S: string; begin {dalej} ClickCount := ClickCount + 1; if ClickCount = 7 then begin ButtonNext.Enabled := False; ButtonInstall.Enabled := True; end; if ClickCount > 0 then ButtonPrev.Enabled := True; S := ExtractFileDir(Application.ExeName); S := Copy(s, 1, Length(S)) + '\'; case ClickCount of 1: begin Memo1.Lines.LoadFromFile(s + 'Licence.txt'); Notebook1.PageIndex := 1; end; procedure TWizardDialog.ButtonNextClick(Sender: TObject); var S: string; begin {dalej} ClickCount := ClickCount + 1; if ClickCount = 7 then begin ButtonNext.Enabled := False; ButtonInstall.Enabled := True; end; if ClickCount > 0 then ButtonPrev.Enabled := True; S := ExtractFileDir(Application.ExeName); S := Copy(s, 1, Length(S)) + '\'; case ClickCount of 1: begin Memo1.Lines.LoadFromFile(s + 'Licence.txt'); Notebook1.PageIndex := 1; end;

16 16 Wykład 9 PROGNOZOWANIE WŁAŚCIWOŚCI MATERIAŁÓW Inżynieria Materiałowa METODOLOGIA TWORZENIA APLIKACJI KOMPUTEROWYCH II SSIPODSTAWY INŻYNIERII OPROGRAMOWANIAII SSI Dr hab. inż. Barbara Dębska, prof. PWSZ Okno kreatora – wyświetlanie licencji instalowanego programu procedure TWizardDialog.ButtonNextClick(Sender: TObject); var S: string; begin {dalej} ClickCount := ClickCount + 1; if ClickCount = 7 then begin ButtonNext.Enabled := False; ButtonInstall.Enabled := True; end; if ClickCount > 0 then ButtonPrev.Enabled := True; S := ExtractFileDir(Application.ExeName); S := Copy(s, 1, Length(S)) + '\'; case ClickCount of 1: begin Memo1.Lines.LoadFromFile(s + 'Licence.txt'); Notebook1.PageIndex := 1; end; 2: begin if RadioButton7.Checked = True then begin {jeżeli licencja nie jest akceptowana to instalator jest zamykany} MainForm.FSetupBreak := False; MainForm.FNotLicense := True; WizardButtonClose := True; MainForm.TimerClose.Enabled := True; end; ButtonNext.Enabled := False; Timer1.Enabled := True; Notebook1.PageIndex := 2; end;... procedure TWizardDialog.ButtonNextClick(Sender: TObject); var S: string; begin {dalej} ClickCount := ClickCount + 1; if ClickCount = 7 then begin ButtonNext.Enabled := False; ButtonInstall.Enabled := True; end; if ClickCount > 0 then ButtonPrev.Enabled := True; S := ExtractFileDir(Application.ExeName); S := Copy(s, 1, Length(S)) + '\'; case ClickCount of 1: begin Memo1.Lines.LoadFromFile(s + 'Licence.txt'); Notebook1.PageIndex := 1; end; 2: begin if RadioButton7.Checked = True then begin {jeżeli licencja nie jest akceptowana to instalator jest zamykany} MainForm.FSetupBreak := False; MainForm.FNotLicense := True; WizardButtonClose := True; MainForm.TimerClose.Enabled := True; end; ButtonNext.Enabled := False; Timer1.Enabled := True; Notebook1.PageIndex := 2; end;...

17 17 Wykład 9 PROGNOZOWANIE WŁAŚCIWOŚCI MATERIAŁÓW Inżynieria Materiałowa METODOLOGIA TWORZENIA APLIKACJI KOMPUTEROWYCH II SSIPODSTAWY INŻYNIERII OPROGRAMOWANIAII SSI Dr hab. inż. Barbara Dębska, prof. PWSZ Okno kreatora – wprowadzanie numerów seryjnych procedure TWizardDialog.Timer1Timer(Sender: TObject); var A, B, C, D, E, F, G, H, Hx, Hy: string; begin {ustawienie zmiennych numeru seryjnego i klucza CD} Hx := 'SN' + '-' + Hx1 + '-' + Hx2 + '-' + Hx3 + '-' + Hx4; Hy := 'CD' + '-' + Hy1 + '-' + Hy2 + '-' + Hy3 + '-' + Hy4; {odblokowanie instalacji po wprowadzeniu numeru seryjnego} if ((Edit1.Text <> '') and (Edit1.Text <> '.')) and ((Edit2.Text <> '') and (Edit2.Text <> '.')) and ((Edit4.Text <> '') and (Edit4.Text <> '.')) and ((Edit5.Text <> '') and (Edit5.Text <> '.')) then if (Edit4.Text = Hx) and (Edit5.Text = Hy) then ButtonNext.Enabled := True; if (Length(Edit4.Text) <> 22) then ButtonNext.Enabled := False; if (Length(Edit5.Text) <> 22) then ButtonNext.Enabled := False; end; procedure TWizardDialog.Timer1Timer(Sender: TObject); var A, B, C, D, E, F, G, H, Hx, Hy: string; begin {ustawienie zmiennych numeru seryjnego i klucza CD} Hx := 'SN' + '-' + Hx1 + '-' + Hx2 + '-' + Hx3 + '-' + Hx4; Hy := 'CD' + '-' + Hy1 + '-' + Hy2 + '-' + Hy3 + '-' + Hy4; {odblokowanie instalacji po wprowadzeniu numeru seryjnego} if ((Edit1.Text <> '') and (Edit1.Text <> '.')) and ((Edit2.Text <> '') and (Edit2.Text <> '.')) and ((Edit4.Text <> '') and (Edit4.Text <> '.')) and ((Edit5.Text <> '') and (Edit5.Text <> '.')) then if (Edit4.Text = Hx) and (Edit5.Text = Hy) then ButtonNext.Enabled := True; if (Length(Edit4.Text) <> 22) then ButtonNext.Enabled := False; if (Length(Edit5.Text) <> 22) then ButtonNext.Enabled := False; end;

18 18 Wykład 9 PROGNOZOWANIE WŁAŚCIWOŚCI MATERIAŁÓW Inżynieria Materiałowa METODOLOGIA TWORZENIA APLIKACJI KOMPUTEROWYCH II SSIPODSTAWY INŻYNIERII OPROGRAMOWANIAII SSI Dr hab. inż. Barbara Dębska, prof. PWSZ procedure TWizardDialog.ButtonBrowseClick(Sender: TObject); var Dir, Root: string; begin {przeglądaj drzewo katalogów} TmpDir := LabelPath.Caption; SelectOk := False; Application.CreateForm(TSelectDirDialog, SelectDirDialog); SelectDirDialog.ShowModal; if SelectOk = True then begin LabelPath.Caption := TmpDir; InstallTargetDir := TmpDir; end; procedure TWizardDialog.ButtonBrowseClick(Sender: TObject); var Dir, Root: string; begin {przeglądaj drzewo katalogów} TmpDir := LabelPath.Caption; SelectOk := False; Application.CreateForm(TSelectDirDialog, SelectDirDialog); SelectDirDialog.ShowModal; if SelectOk = True then begin LabelPath.Caption := TmpDir; InstallTargetDir := TmpDir; end; Okno kreatora – wybór katalogu instalacyjnego... 3: begin if DirectoryExists(FetchSysDir + '\Program Files') = True then begin InstallTargetDir := FetchSysDir + ProgramFiles; LabelPath.Caption := FetchSysDir + ProgramFiles + MainWorkDir; end; Timer1.Enabled := False; Notebook1.PageIndex := 3; end;... 3: begin if DirectoryExists(FetchSysDir + '\Program Files') = True then begin InstallTargetDir := FetchSysDir + ProgramFiles; LabelPath.Caption := FetchSysDir + ProgramFiles + MainWorkDir; end; Timer1.Enabled := False; Notebook1.PageIndex := 3; end;... function FetchSysDir: string; var Buffer: PChar; begin GetMem(Buffer, MAX_PATH); GetWindowsDirectory(Buffer, MAX_PATH); Result := Copy(Buffer, 1, 2); FreeMem(Buffer); end; function FetchSysDir: string; var Buffer: PChar; begin GetMem(Buffer, MAX_PATH); GetWindowsDirectory(Buffer, MAX_PATH); Result := Copy(Buffer, 1, 2); FreeMem(Buffer); end;

19 19 Wykład 9 PROGNOZOWANIE WŁAŚCIWOŚCI MATERIAŁÓW Inżynieria Materiałowa METODOLOGIA TWORZENIA APLIKACJI KOMPUTEROWYCH II SSIPODSTAWY INŻYNIERII OPROGRAMOWANIAII SSI Dr hab. inż. Barbara Dębska, prof. PWSZ Okno wyboru katalogu instalacyjnego procedure TSelectDirDialog.FormCreate(Sender: TObject); var Dev, Dir: string; begin {ustawienia startowe} DialogButtonClose := False; Dev := ExtractFileDrive(WizardDialog.TmpDir); DriveComboBox1.Drive := Dev[1]; DirectoryListBox1.Drive := Dev[1]; Dir := Copy(WizardDialog.TmpDir, 1, Length(WizardDialog.TmpDir) - 20); DirectoryListBox1.Directory := Dir; Edit1.Text := DirectoryListBox1.Directory + MainWorkDir; end; procedure TSelectDirDialog.DirectoryListBox1Change(Sender: TObject); var Dir: string; begin {wyświetlenie katalogu w polu edycyjnym} Dir := DirectoryListBox1.Directory; if Copy(Dir, Length(Dir), 1) = '\' then Dir := Copy(Dir, 1, Length(Dir) - 1); Edit1.Text := Dir + MainWorkDir; end; procedure TSelectDirDialog.FormClose(Sender: Tobject; var Action: TCloseAction); begin {blokada zamknięcia przez przycisk na pasku tytułowym} if DialogButtonClose = False then Action := caNone else Action := caFree; end; procedure TSelectDirDialog.ButtonOKClick(Sender: TObject); begin {OK} WizardDialog.TmpDir := Edit1.Text; WizardDialog.SelectOk := True; DialogButtonClose := True; Close; end; procedure TSelectDirDialog.FormCreate(Sender: TObject); var Dev, Dir: string; begin {ustawienia startowe} DialogButtonClose := False; Dev := ExtractFileDrive(WizardDialog.TmpDir); DriveComboBox1.Drive := Dev[1]; DirectoryListBox1.Drive := Dev[1]; Dir := Copy(WizardDialog.TmpDir, 1, Length(WizardDialog.TmpDir) - 20); DirectoryListBox1.Directory := Dir; Edit1.Text := DirectoryListBox1.Directory + MainWorkDir; end; procedure TSelectDirDialog.DirectoryListBox1Change(Sender: TObject); var Dir: string; begin {wyświetlenie katalogu w polu edycyjnym} Dir := DirectoryListBox1.Directory; if Copy(Dir, Length(Dir), 1) = '\' then Dir := Copy(Dir, 1, Length(Dir) - 1); Edit1.Text := Dir + MainWorkDir; end; procedure TSelectDirDialog.FormClose(Sender: Tobject; var Action: TCloseAction); begin {blokada zamknięcia przez przycisk na pasku tytułowym} if DialogButtonClose = False then Action := caNone else Action := caFree; end; procedure TSelectDirDialog.ButtonOKClick(Sender: TObject); begin {OK} WizardDialog.TmpDir := Edit1.Text; WizardDialog.SelectOk := True; DialogButtonClose := True; Close; end;

20 20 Wykład 9 PROGNOZOWANIE WŁAŚCIWOŚCI MATERIAŁÓW Inżynieria Materiałowa METODOLOGIA TWORZENIA APLIKACJI KOMPUTEROWYCH II SSIPODSTAWY INŻYNIERII OPROGRAMOWANIAII SSI Dr hab. inż. Barbara Dębska, prof. PWSZ Okno kreatora – wybór folderu w Menu Start... 4: begin if ListBox1.Items.Count = 0 then FillProgList; Notebook1.PageIndex := 4; end;... 4: begin if ListBox1.Items.Count = 0 then FillProgList; Notebook1.PageIndex := 4; end;... procedure TWizardDialog.FillProgList; var i: Byte; Path: string; FileName, S: string; NameRec: TSearchRec; ProgList: TStringList; begin {wypełnienie listy folderami istniejących programów} ProgList := TStringList.Create; Path := FetchPath(CSIDL_PROGRAMS, WizardDialog.Handle) + '\*.*'; InstallProgMenu := FetchPath(CSIDL_PROGRAMS, WizardDialog.Handle); if FindFirst(Path, faAnyFile, NameRec) = 0 then begin FileName := Copy(NameRec.Name, 1, Length(NameRec.Name)); ProgList.Add(FileName); i := 1; while FindNext(NameRec) = 0 do begin FileName := Copy(NameRec.Name, 1, Length(NameRec.Name)); ProgList.Add(FileName); i := i + 1; end; FindClose(NameRec); end; {wypełnienie listy widokowej} ProgList.Sorted := True; ProgList.Sorted := False; if ProgList.Strings[0] = '.' then ProgList.Delete(0); if ProgList.Strings[0] = '..' then ProgList.Delete(0); for i := 0 to ProgList.Count - 1 do begin S := Copy(ProgList.Strings[i], Length(ProgList.Strings[i]) - 3, 4); if (S = '.lnk') or (S = '.pif') or (S = '.ini') then S := Copy(ProgList.Strings[i], 1, Length(ProgList.Strings[i]) - 4) else S := ProgList.Strings[i]; ListBox1.Items.Add(s); end; ProgList.Clear; ProgList.Free; end; procedure TWizardDialog.FillProgList; var i: Byte; Path: string; FileName, S: string; NameRec: TSearchRec; ProgList: TStringList; begin {wypełnienie listy folderami istniejących programów} ProgList := TStringList.Create; Path := FetchPath(CSIDL_PROGRAMS, WizardDialog.Handle) + '\*.*'; InstallProgMenu := FetchPath(CSIDL_PROGRAMS, WizardDialog.Handle); if FindFirst(Path, faAnyFile, NameRec) = 0 then begin FileName := Copy(NameRec.Name, 1, Length(NameRec.Name)); ProgList.Add(FileName); i := 1; while FindNext(NameRec) = 0 do begin FileName := Copy(NameRec.Name, 1, Length(NameRec.Name)); ProgList.Add(FileName); i := i + 1; end; FindClose(NameRec); end; {wypełnienie listy widokowej} ProgList.Sorted := True; ProgList.Sorted := False; if ProgList.Strings[0] = '.' then ProgList.Delete(0); if ProgList.Strings[0] = '..' then ProgList.Delete(0); for i := 0 to ProgList.Count - 1 do begin S := Copy(ProgList.Strings[i], Length(ProgList.Strings[i]) - 3, 4); if (S = '.lnk') or (S = '.pif') or (S = '.ini') then S := Copy(ProgList.Strings[i], 1, Length(ProgList.Strings[i]) - 4) else S := ProgList.Strings[i]; ListBox1.Items.Add(s); end; ProgList.Clear; ProgList.Free; end; function FetchPath(Parameter: Integer; WinHandle: THandle): string; var Buffer: PChar; Dir: PItemIDList; begin GetMem(Buffer, MAX_PATH); SHGetSpecialFolderLocation(WinHandle, Parameter, Dir); SHGetPathFromIDList(Dir, Buffer); Result := Buffer; FreeMem(Buffer); end; function FetchPath(Parameter: Integer; WinHandle: THandle): string; var Buffer: PChar; Dir: PItemIDList; begin GetMem(Buffer, MAX_PATH); SHGetSpecialFolderLocation(WinHandle, Parameter, Dir); SHGetPathFromIDList(Dir, Buffer); Result := Buffer; FreeMem(Buffer); end;

21 21 Wykład 9 PROGNOZOWANIE WŁAŚCIWOŚCI MATERIAŁÓW Inżynieria Materiałowa METODOLOGIA TWORZENIA APLIKACJI KOMPUTEROWYCH II SSIPODSTAWY INŻYNIERII OPROGRAMOWANIAII SSI Dr hab. inż. Barbara Dębska, prof. PWSZ Okno kreatora – wyświetlanie podsumowania ustawień insytalacji... 5: begin if TreeView1.Items.Item[6].HasChildren = True then begin TreeView1.Items.Item[6].DeleteChildren; FillTreeProp; end else FillTreeProp; ButtonNext.Enabled := False; ButtonInstall.Enabled := True; Notebook1.PageIndex := 5; end;... 5: begin if TreeView1.Items.Item[6].HasChildren = True then begin TreeView1.Items.Item[6].DeleteChildren; FillTreeProp; end else FillTreeProp; ButtonNext.Enabled := False; ButtonInstall.Enabled := True; Notebook1.PageIndex := 5; end; procedure TWizardDialog.FillTreeProp; begin {wypełnienie drzewa właściwości instalacji} TreeView1.Items.Item[0].Item[0].Text := LabelPath.Caption; TreeView1.Items.Item[2].Item[0].Text := PersonName + Edit1.Text; TreeView1.Items.Item[2].Item[1].Text := CompanyName + Edit2.Text; TreeView1.Items.Item[2].Item[2].Text := SerialNumber + Edit4.Text; TreeView1.Items.Item[2].Item[3].Text := CdKey + Edit5.Text; TreeView1.FullExpand; end; procedure TWizardDialog.FillTreeProp; begin {wypełnienie drzewa właściwości instalacji} TreeView1.Items.Item[0].Item[0].Text := LabelPath.Caption; TreeView1.Items.Item[2].Item[0].Text := PersonName + Edit1.Text; TreeView1.Items.Item[2].Item[1].Text := CompanyName + Edit2.Text; TreeView1.Items.Item[2].Item[2].Text := SerialNumber + Edit4.Text; TreeView1.Items.Item[2].Item[3].Text := CdKey + Edit5.Text; TreeView1.FullExpand; end;

22 22 Wykład 9 PROGNOZOWANIE WŁAŚCIWOŚCI MATERIAŁÓW Inżynieria Materiałowa METODOLOGIA TWORZENIA APLIKACJI KOMPUTEROWYCH II SSIPODSTAWY INŻYNIERII OPROGRAMOWANIAII SSI Dr hab. inż. Barbara Dębska, prof. PWSZ Okno kreatora – kopiowanie plików instalacyjnych procedure TWizardDialog.CopyFiles; var Src, Tgt: PChar; WinDir: string; i: Integer; begin {ustawienie ścieżki dostępu do plików źródłowych} InstallSourceDir := ExtractFileDir(Application.ExeName) + '\Micro'; {kopiowanie plików wykonywalnych: aplikacji i bibliotek DLL} for i := 0 to High(MikroAppFiles) do begin Src := PChar(InstallSourceDir + MikroAppFiles[i]); Tgt := PChar(InstallTargetDir + SubWorkDirs[0] + MikroAppFiles[i]); LabelSrc.Caption := Src; LabelTgt.Caption := Tgt; CopyFile(Src, Tgt, False); SetFileAttributes(Tgt, FILE_ATTRIBUTE_NORMAL); ProgressBarCopy.Position := ProgressBarCopy.Position + 1; Application.ProcessMessages; end; {kopiowanie pliku licencji programu} Src := PChar(InstallSourceDir + MikroLicFile); Tgt := PChar(InstallTargetDir + SubWorkDirs[0] + MikroLicFile); LabelSrc.Caption := Src; LabelTgt.Caption := Tgt; CopyFile(Src, Tgt, False); SetFileAttributes(Tgt, FILE_ATTRIBUTE_NORMAL); ProgressBarCopy.Position := ProgressBarCopy.Position + 1; Application.ProcessMessages;... procedure TWizardDialog.CopyFiles; var Src, Tgt: PChar; WinDir: string; i: Integer; begin {ustawienie ścieżki dostępu do plików źródłowych} InstallSourceDir := ExtractFileDir(Application.ExeName) + '\Micro'; {kopiowanie plików wykonywalnych: aplikacji i bibliotek DLL} for i := 0 to High(MikroAppFiles) do begin Src := PChar(InstallSourceDir + MikroAppFiles[i]); Tgt := PChar(InstallTargetDir + SubWorkDirs[0] + MikroAppFiles[i]); LabelSrc.Caption := Src; LabelTgt.Caption := Tgt; CopyFile(Src, Tgt, False); SetFileAttributes(Tgt, FILE_ATTRIBUTE_NORMAL); ProgressBarCopy.Position := ProgressBarCopy.Position + 1; Application.ProcessMessages; end; {kopiowanie pliku licencji programu} Src := PChar(InstallSourceDir + MikroLicFile); Tgt := PChar(InstallTargetDir + SubWorkDirs[0] + MikroLicFile); LabelSrc.Caption := Src; LabelTgt.Caption := Tgt; CopyFile(Src, Tgt, False); SetFileAttributes(Tgt, FILE_ATTRIBUTE_NORMAL); ProgressBarCopy.Position := ProgressBarCopy.Position + 1; Application.ProcessMessages;...

23 23 Wykład 9 PROGNOZOWANIE WŁAŚCIWOŚCI MATERIAŁÓW Inżynieria Materiałowa METODOLOGIA TWORZENIA APLIKACJI KOMPUTEROWYCH II SSIPODSTAWY INŻYNIERII OPROGRAMOWANIAII SSI Dr hab. inż. Barbara Dębska, prof. PWSZ Okno kreatora – tworzenie skrótów do programu procedure CreateShellLink(const SourceFile, Name, Location, Description, Icon: string; IconIndex: Integer); var SLink: IShellLink; PFile: IPersistFile; LName: WideString; LInfo: TShellLinkInfo; begin {procedura tworząca skrót do pliku} OleCheck(CoCreateInstance(CLSID_ShellLink, nil, CLSCTX_INPROC_SERVER, IShellLink, SLink)); PFile := SLink as IPersistFile; OleCheck(SLink.SetPath(PChar(SourceFile))); LName := Location + '\' + Name + '.lnk'; {wstawienie odpowiedniej informacji} LInfo.PathName := SourceFile; LInfo.Arguments := ''; LInfo.Description := Description; LInfo.WorkingDirectory := ''; LInfo.IconLocation := SourceFile; LInfo.IconIndex := 0; {wypełnienie pliku odpowiednią informacją} with LInfo, SLink do begin OleCheck(SetPath(PChar(PathName))); OleCheck(SetArguments(PChar(Arguments))); OleCheck(SetDescription(PChar(Description))); OleCheck(SetWorkingDirectory(PChar(WorkingDirectory))); OleCheck(SetIconLocation(PChar(IconLocation), IconIndex)); end; {zapisanie informacji do pliku na dysku} PFile.Save(PWideChar(LName), True); end; procedure CreateShellLink(const SourceFile, Name, Location, Description, Icon: string; IconIndex: Integer); var SLink: IShellLink; PFile: IPersistFile; LName: WideString; LInfo: TShellLinkInfo; begin {procedura tworząca skrót do pliku} OleCheck(CoCreateInstance(CLSID_ShellLink, nil, CLSCTX_INPROC_SERVER, IShellLink, SLink)); PFile := SLink as IPersistFile; OleCheck(SLink.SetPath(PChar(SourceFile))); LName := Location + '\' + Name + '.lnk'; {wstawienie odpowiedniej informacji} LInfo.PathName := SourceFile; LInfo.Arguments := ''; LInfo.Description := Description; LInfo.WorkingDirectory := ''; LInfo.IconLocation := SourceFile; LInfo.IconIndex := 0; {wypełnienie pliku odpowiednią informacją} with LInfo, SLink do begin OleCheck(SetPath(PChar(PathName))); OleCheck(SetArguments(PChar(Arguments))); OleCheck(SetDescription(PChar(Description))); OleCheck(SetWorkingDirectory(PChar(WorkingDirectory))); OleCheck(SetIconLocation(PChar(IconLocation), IconIndex)); end; {zapisanie informacji do pliku na dysku} PFile.Save(PWideChar(LName), True); end; procedure TWizardDialog.MakeLinks; var FolderPath, Desc: string; begin {utworzenie folderu skrótów w menu start} FolderPath := InstallProgMenu + '\' + EditProgFolder.Text; if not DirectoryExists(FolderPath) then if not CreateDir(FolderPath) then raise Exception.Create(CreateDirError); {utworzenie właściwych skrótu dla pliku Mikroanalizatora w menu start} Desc := ProgramDesc; CreateShellLink(InstallMicroDir, ProgamLink, FolderPath, Desc, InstallMicroDir, 0); {utworzenie właściwych skrótu dla pliku pomocy w menu start} Desc := HelpDesc; CreateShellLink(InstallHelpDir, HelpLink, FolderPath, Desc, '', 0); {utworzenie właściwych skrótu dla pliku tekstowego licencji w menu start} Desc := LicenseDesc; CreateShellLink(InstallLicenceDir, LicenseLink, FolderPath, Desc, '', 0); end; procedure TWizardDialog.MakeLinks; var FolderPath, Desc: string; begin {utworzenie folderu skrótów w menu start} FolderPath := InstallProgMenu + '\' + EditProgFolder.Text; if not DirectoryExists(FolderPath) then if not CreateDir(FolderPath) then raise Exception.Create(CreateDirError); {utworzenie właściwych skrótu dla pliku Mikroanalizatora w menu start} Desc := ProgramDesc; CreateShellLink(InstallMicroDir, ProgamLink, FolderPath, Desc, InstallMicroDir, 0); {utworzenie właściwych skrótu dla pliku pomocy w menu start} Desc := HelpDesc; CreateShellLink(InstallHelpDir, HelpLink, FolderPath, Desc, '', 0); {utworzenie właściwych skrótu dla pliku tekstowego licencji w menu start} Desc := LicenseDesc; CreateShellLink(InstallLicenceDir, LicenseLink, FolderPath, Desc, '', 0); end;

24 24 Wykład 9 PROGNOZOWANIE WŁAŚCIWOŚCI MATERIAŁÓW Inżynieria Materiałowa METODOLOGIA TWORZENIA APLIKACJI KOMPUTEROWYCH II SSIPODSTAWY INŻYNIERII OPROGRAMOWANIAII SSI Dr hab. inż. Barbara Dębska, prof. PWSZ Okno kreatora – tworzenie wpisów w Rejestrze systemu Windows procedure TWizardDialog.RegSettings; var AppReg: TRegistry; WinDir: string; begin {tworzenie wpisów ustawień programu w Rejestrze Windows} AppReg := TRegistry.Create(KEY_ALL_ACCESS); try {ustwienie ścieżki dostępu do pliku ustawień rejestrowych} GetSettings; AppReg.RootKey := HKEY_LOCAL_MACHINE; if AppReg.KeyExists('\SOFTWARE') = True then AppReg.CreateKey('\SOFTWARE\BBT'); if AppReg.KeyExists('\SOFTWARE\BBT') = True then AppReg.CreateKey('\SOFTWARE\BBT\Micro'); if AppReg.KeyExists('\Software\BBT\Micro') = True then begin with AppReg do {zapis ustawień do Rejestru Windows} begin AppReg.OpenKey('\Software\BBT\Micro\Window', True); WriteBool('State', RegData.WindowState); WriteInteger('Width', RegData.WindowWidth);... WriteString('MainFolder', RegData.MainFolder); WriteString('ProgMenu', RegData.ProgMenu); AppReg.CloseKey; end;... {rejestrowanie wpisu programu deinstalującego} WinDir := FetchWinDir; AppReg.RootKey := HKEY_LOCAL_MACHINE; if AppReg.KeyExists(UnInstKey) = True then begin AppReg.CreateKey(UnMicroKey); AppReg.OpenKey(UnMicroKey, False); AppReg.WriteString('DisplayName', 'BBT Micro Uninstaller'); AppReg.WriteString('UninstallString', WinDir + '\Uninstallmcr.exe'); AppReg.CloseKey; end; finally {zwolnienie obiektu rejestru} AppReg.Free; inherited; end; procedure TWizardDialog.RegSettings; var AppReg: TRegistry; WinDir: string; begin {tworzenie wpisów ustawień programu w Rejestrze Windows} AppReg := TRegistry.Create(KEY_ALL_ACCESS); try {ustwienie ścieżki dostępu do pliku ustawień rejestrowych} GetSettings; AppReg.RootKey := HKEY_LOCAL_MACHINE; if AppReg.KeyExists('\SOFTWARE') = True then AppReg.CreateKey('\SOFTWARE\BBT'); if AppReg.KeyExists('\SOFTWARE\BBT') = True then AppReg.CreateKey('\SOFTWARE\BBT\Micro'); if AppReg.KeyExists('\Software\BBT\Micro') = True then begin with AppReg do {zapis ustawień do Rejestru Windows} begin AppReg.OpenKey('\Software\BBT\Micro\Window', True); WriteBool('State', RegData.WindowState); WriteInteger('Width', RegData.WindowWidth);... WriteString('MainFolder', RegData.MainFolder); WriteString('ProgMenu', RegData.ProgMenu); AppReg.CloseKey; end;... {rejestrowanie wpisu programu deinstalującego} WinDir := FetchWinDir; AppReg.RootKey := HKEY_LOCAL_MACHINE; if AppReg.KeyExists(UnInstKey) = True then begin AppReg.CreateKey(UnMicroKey); AppReg.OpenKey(UnMicroKey, False); AppReg.WriteString('DisplayName', 'BBT Micro Uninstaller'); AppReg.WriteString('UninstallString', WinDir + '\Uninstallmcr.exe'); AppReg.CloseKey; end; finally {zwolnienie obiektu rejestru} AppReg.Free; inherited; end; procedure TWizardDialog.GetSettings; begin {zainicjowanie wpisów rejestrowych} with RegData do begin StandardBar := True; ImageBar := True; EditBar := True; HelpBar := True; AnalyseBar := True; ReportBar := True; StatusBar := True; ShowHints := True; ShortCuts := False; SourceType := True; SourceName := ''; SourceIndex := -1;... WindowWidth := 620; WindowHeight := 440; WindowLeft := (Screen.Width div 2) - (RegData.WindowWidth div 2); WindowTop := (Screen.Height div 2) - (RegData.WindowHeight div 2); ReportFormat := 1; LicenseFolder := BinFolder + MikroLicFile; TipsFolder := HelpFolder + MikroTipsFile; ProgMenu := InstallProgMenu + '\' + EditProgFolder.Text; end; procedure TWizardDialog.GetSettings; begin {zainicjowanie wpisów rejestrowych} with RegData do begin StandardBar := True; ImageBar := True; EditBar := True; HelpBar := True; AnalyseBar := True; ReportBar := True; StatusBar := True; ShowHints := True; ShortCuts := False; SourceType := True; SourceName := ''; SourceIndex := -1;... WindowWidth := 620; WindowHeight := 440; WindowLeft := (Screen.Width div 2) - (RegData.WindowWidth div 2); WindowTop := (Screen.Height div 2) - (RegData.WindowHeight div 2); ReportFormat := 1; LicenseFolder := BinFolder + MikroLicFile; TipsFolder := HelpFolder + MikroTipsFile; ProgMenu := InstallProgMenu + '\' + EditProgFolder.Text; end;

25 25 Wykład 9 PROGNOZOWANIE WŁAŚCIWOŚCI MATERIAŁÓW Inżynieria Materiałowa METODOLOGIA TWORZENIA APLIKACJI KOMPUTEROWYCH II SSIPODSTAWY INŻYNIERII OPROGRAMOWANIAII SSI Dr hab. inż. Barbara Dębska, prof. PWSZ procedure TMainForm.FormClose(Sender: TObject; var Action: TCloseAction); begin {blokada zamknięcia przez przycisk na pasku tytułowym} if InstallButtonClose = False then Action := caNone else begin {zamknięcie programu instalatora} if FSetupBreak = True then Application.MessageBox(CancelInstallation, Installation, MB_ICONEXCLAMATION); if FNotLicense = True then Application.MessageBox(RejectedLicense, Installation, MB_ICONINFORMATION); if (FSetupEnd = True) and (FCloseWindows = False) then Application.MessageBox(SuccesInstallation, Installation, MB_ICONINFORMATION); if (FSetupEnd = True) and (FCloseWindows = True) then Application.MessageBox(SuccessAndReboot, Installation, MB_ICONINFORMATION); Action := caFree; end; procedure TMainForm.FormClose(Sender: TObject; var Action: TCloseAction); begin {blokada zamknięcia przez przycisk na pasku tytułowym} if InstallButtonClose = False then Action := caNone else begin {zamknięcie programu instalatora} if FSetupBreak = True then Application.MessageBox(CancelInstallation, Installation, MB_ICONEXCLAMATION); if FNotLicense = True then Application.MessageBox(RejectedLicense, Installation, MB_ICONINFORMATION); if (FSetupEnd = True) and (FCloseWindows = False) then Application.MessageBox(SuccesInstallation, Installation, MB_ICONINFORMATION); if (FSetupEnd = True) and (FCloseWindows = True) then Application.MessageBox(SuccessAndReboot, Installation, MB_ICONINFORMATION); Action := caFree; end; Okno kreatora – zakończenie instalacji procedure TMainForm.FormDestroy(Sender: TObject); var iToken: THandle; iPrivilege: TTokenPrivileges; iAResult: DWord; WinType: Byte; begin {usunięcie aplikacji instalatora i ewentualny restart Windows} WinType := 0; if FCloseWindows = True then begin {sprawdzenie typu Windows} if Win32Platform = VER_PLATFORM_WIN32_WINDOWS then WinType := 1; if Win32Platform = VER_PLATFORM_WIN32_NT then WinType := 2; if Win32Platform = VER_PLATFORM_WIN32s then WinType := 3; if (Win32Platform <> VER_PLATFORM_WIN32_NT) or (Win32Platform <> VER_PLATFORM_WIN32_WINDOWS) then WinType := 4; {wybór odpowiedniego restartu systemu} case WinType of 1: Win32Check(ExitWindowsEx(EWX_REBOOT, 0)); 2: begin FillChar(iPrivilege, SizeOf(iPrivilege), #0); if OpenProcessToken(GetCurrentProcess, TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, iToken) then if LookupPrivilegeValue(NIL, 'SeShutdownPrivilege', iPrivilege.Privileges[0].LUID) then begin iPrivilege.PrivilegeCount := 1; iPrivilege.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED; if AdjustTokenPrivileges(iToken, False, iPrivilege, SizeOf(iPrivilege), iPrivilege, iAResult) then Win32Check(ExitWindowsEx(EWX_REBOOT, 0)); end; 3: Win32Check(ExitWindowsEx(EWX_REBOOT, 0)) else Win32Check(ExitWindows(0, 0)); end; procedure TMainForm.FormDestroy(Sender: TObject); var iToken: THandle; iPrivilege: TTokenPrivileges; iAResult: DWord; WinType: Byte; begin {usunięcie aplikacji instalatora i ewentualny restart Windows} WinType := 0; if FCloseWindows = True then begin {sprawdzenie typu Windows} if Win32Platform = VER_PLATFORM_WIN32_WINDOWS then WinType := 1; if Win32Platform = VER_PLATFORM_WIN32_NT then WinType := 2; if Win32Platform = VER_PLATFORM_WIN32s then WinType := 3; if (Win32Platform <> VER_PLATFORM_WIN32_NT) or (Win32Platform <> VER_PLATFORM_WIN32_WINDOWS) then WinType := 4; {wybór odpowiedniego restartu systemu} case WinType of 1: Win32Check(ExitWindowsEx(EWX_REBOOT, 0)); 2: begin FillChar(iPrivilege, SizeOf(iPrivilege), #0); if OpenProcessToken(GetCurrentProcess, TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, iToken) then if LookupPrivilegeValue(NIL, 'SeShutdownPrivilege', iPrivilege.Privileges[0].LUID) then begin iPrivilege.PrivilegeCount := 1; iPrivilege.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED; if AdjustTokenPrivileges(iToken, False, iPrivilege, SizeOf(iPrivilege), iPrivilege, iAResult) then Win32Check(ExitWindowsEx(EWX_REBOOT, 0)); end; 3: Win32Check(ExitWindowsEx(EWX_REBOOT, 0)) else Win32Check(ExitWindows(0, 0)); end; procedure TWizardDialog.ButtonEndClick(Sender: TObject); begin {poprawne zakończenie instalacji} if ButtonEnd.Enabled = True then begin if RadioButtonRestart.Checked = True then MainForm.FCloseWindows := True; MainForm.FSetupEnd := True; WizardButtonClose := True; MainForm.TimerClose.Enabled := True; end; procedure TWizardDialog.ButtonEndClick(Sender: TObject); begin {poprawne zakończenie instalacji} if ButtonEnd.Enabled = True then begin if RadioButtonRestart.Checked = True then MainForm.FCloseWindows := True; MainForm.FSetupEnd := True; WizardButtonClose := True; MainForm.TimerClose.Enabled := True; end;

26 26 Wykład 9 PROGNOZOWANIE WŁAŚCIWOŚCI MATERIAŁÓW Inżynieria Materiałowa METODOLOGIA TWORZENIA APLIKACJI KOMPUTEROWYCH II SSIPODSTAWY INŻYNIERII OPROGRAMOWANIAII SSI Dr hab. inż. Barbara Dębska, prof. PWSZ Zabezpieczenie instalatora za pomocą hasła (numer seryjny): - Hasło jest przechowane w postaci pośredniej. - Postać pośrednia hasła oznacza, że musi być ono przetworzone przez tzw. funkcję haszującą. - Funkcje tego typu zmieniają treść hasła w taki sposób, że odtworzenie jego pierwotnej treści nie jest możliwe (tzn. funkcje te nie są odwracalne). Dopiero w tej formie hasło jest umieszczane w pliku instalatora. - Ta postać hasła będzie potem porównywana podczas instalacji z zahaszowana postacią hasła podanego przez użytkownika. Zabezpieczenia instalatora z użyciem tzw. klucza (lepsze rozwiązanie): - Klucz – to duża liczba, np. 128 bitowa, - Klucz jest mieszany przez funkcję haszującą z losową liczbą o długości 64 bitów (sól) i hasłem. - Tak wygenerowany klucz jest następnie użyty do szyfrowania wszystkich plików instalacyjnych. - Metoda ta jest jednak dość trudna w implementacji. Metody zabezpieczania instalatora

27 27 Wykład 9 PROGNOZOWANIE WŁAŚCIWOŚCI MATERIAŁÓW Inżynieria Materiałowa METODOLOGIA TWORZENIA APLIKACJI KOMPUTEROWYCH II SSIPODSTAWY INŻYNIERII OPROGRAMOWANIAII SSI Dr hab. inż. Barbara Dębska, prof. PWSZ Zestawienie trudności wiążących się z implementacją instalatora: tworzenie katalogów roboczych programu w wybranym katalogu systemu, kopiowanie plików instalacyjnych do wybranych katalogów roboczych, nadawanie skopiowanym plikom właściwych atrybutów i praw dostępu dla użytkowników, tworzenie skrótów w menu start i skrótów na pulpicie z uwzględnieniem kont użytkowników, zapisywanie ustawień instalowanego programu w gałęzi Software Rejestru Windows, rejestrowanie formatów plików oraz akcji systemowych z nimi związanych w Rejestrze Windows, rejestrowanie deinstalatora w gałęzi Uninstall Rejestru Windows, Dodatkowo może zachodzić potrzeba ( jeżeli instalowany program tego wymaga): rejestrowania obiektów/serwerów COM, oraz rejestrowania infrastruktury baz danych. W związku z powyższym koniecznym jest dogłębne zaznajomienie się z: sposobem pracy i działaniem usług systemowych, budową systemu operacyjnego dla którego implementujemy instalator, funkcjami API (Application Programming Interface) dającymi odstęp do niższych warstw systemu operacyjnego.

28 28 Wykład 9 PROGNOZOWANIE WŁAŚCIWOŚCI MATERIAŁÓW Inżynieria Materiałowa METODOLOGIA TWORZENIA APLIKACJI KOMPUTEROWYCH II SSIPODSTAWY INŻYNIERII OPROGRAMOWANIAII SSI Dr hab. inż. Barbara Dębska, prof. PWSZ


Pobierz ppt "1 Wykład 9 PROGNOZOWANIE WŁAŚCIWOŚCI MATERIAŁÓW Inżynieria Materiałowa METODOLOGIA TWORZENIA APLIKACJI KOMPUTEROWYCH II SSIPODSTAWY INŻYNIERII OPROGRAMOWANIAII."

Podobne prezentacje


Reklamy Google