Konfiguracja instalatora w środowisku Windows z wieloma użytkownikami
Nowoczesne systemy Windows obsługują konta wielu użytkowników na jednym komputerze, każde z innymi uprawnieniami. Z powodów bezpieczeństwa, uprawnienia aplikacji również są ograniczone. Z punktu widzenia instalatora, ważne są: poziom wykonania oraz tryb instalacji. Poziom wykonania określa uprawnienia dla instalatora. Na przykład, aby zainstalować sterowniki urządzeń, wymagane są uprawnienia administratora. Programy mogą być również instalowane dla pojedynczego użytkownika lub dla wszystkich użytkowników komputera. Określa to tryb instalacji. Instalacja dla wszystkich użytkowników wymaga wyższych uprawnień w porównaniu z trybem instalacji dla pojedynczego użytkownika. Plik nagłówkowy MultiUser.nsh umożliwia automatyczną obsługę opisywanych aspektów procesu instalacji, to jest obsługę kont użytkowników oraz uprawnień.
Proszę zwrócić uwagę, że wszystkie ustawienia muszą być ustalone przed dołączeniem pliku nagłówkowego MultiUser.nsh.
Przed dołączeniem pliku nagłówkowego MultiUser.nsh, powinna być określona definicja MULTIUSER_EXECUTIONLEVEL. Przyjmować może ona jedną z poniższych wartości, w zależności od wymaganego poziomu wykonania:
Wymagane są uprawnienia administratora. Dostęp do danych wszystkich użytkowników.
Wymagane są uprawnienia użytkownika zaawansowanego (użytkownicy zaawansowani nie istnieją w systemie Windows Vista. W systemie tym odpowiadają oni użytkownikom administratorom). Dostęp do danych wszystkich użytkowników (zapis do lokalizacji "Program Files" lub kluczy gałęzi rejestru HKLM), instalacja sterowników).
Wymagany jest najwyższy możliwy poziom wykonania dla bieżącego użytkownika. Instalator może działać w trybie mieszanym, zarówno instalacja dla pojedynczego użytkownika, jak i dla wszystkich użytkowników.
Nie wymagane są żadne specjalne uprawnienia. Instalacja tylko dla bieżącego użytkownika.
Aby zweryfikować te uprawnienia, wstaw makra MULTIUSER_INIT oraz MULTIUSER_UNINT w funkcji .onInit oraz un.onInit. Jeśli nie jest tworzony deinstalator, ustaw definicję MULTIUSER_NOUNINSTALL.
!define MULTIUSER_EXECUTIONLEVEL Highest ; !define MULTIUSER_NOUNINSTALL ; Odkomentuj tę linię, jeśli deinstalator nie jest tworzony !include MultiUser.nsh ... Function .onInit !insertmacro MULTIUSER_INIT FunctionEnd Function un.onInit !insertmacro MULTIUSER_UNINIT FunctionEnd
To, czy wymagane uprawnienia mogą być pobrane zależy od użytkownika, który uruchamia instalatora:
Zaleca się wstawienie inicjujących makr przed makrami, które wymagają interwencji użytkownika. Na przykład, nie ma sensu pytać użytkownika o język instalatora, jeśli instalator zakończy pracę, ponieważ konto użytkownika nie posiada odpowiednich uprawnień. Po wstawieniu tych makr, zmienna $MultiUser.Privileges będzie zawierała poziom wykonania bieżącego użytkownika (Admin, Power, User lub Guest).
Dostępne są poniższe dodatkowe ustawienia dla inicjalizacji:
Komunikat błędu, który zostanie wyświetlony, jeśli wymagane są prawa administratora, ale nie są one dostępne.
Komunikat błędu, który zostanie wyświetlony, jeśli wymagane są prawa użytkownika zaawansowanego, ale nie są one dostępne.
Komunikat błędu, który zostanie wyświetlony, jeśli wymagane są prawa administratora lub użytkownika zaawansowanego z uwagi na ustawienia trybu instalacji w linii poleceń (patrz poniżej), ale nie są one dostępne.
Użyj katalogu $PROGRAMFILES64 zamiast katalogu $PROGRAMFILES jako domyślny katalog Wszystkich użytkowników.
Niestandardowa funkcja, która zostanie wywołana, jeśli instalator jest zamykany z powodu niewystarczających uprawnień.
Jak wcześniej wspomniano, aplikacje mogą być instalowane zarówno dla pojedynczego użytkownika, jak i dla wszystkich użytkowników komputera. Aplikacje dla wszystkich użytkowników zazwyczaj instalowane są w katalogu 'Program Files' i pojawiają się w menu Start każdego użytkownika komputera. Aplikacje dla pojedynczego użytkownika zaś, są zazwyczaj instalowane w lokalnym katalogu danych aplikacji i pojawiają się w menu Start użytkownika, który zainstalował aplikację.
Domyślnie, plik nagłówkowy MultiUser.nsh ustawia tryb instalacji na tryb instalacji dla wszystkich użytkowników, jeśli dostępne są uprawnienia administratora lub użytkownika zaawansowanego (dzieje się tak zawsze, gdy poziom wykonania ustawiony jest na uprawnienia administratora Admin lub użytkownika zaawansowanego Power. Poziom wykonania z najwyższymi dostępnymi uprawnieniami użytkownika Highest zależy od konta użytkownika). Dla standardowego poziomu wykonania instalacja zawsze będzie trybem instalacji pojedynczego użytkownika. W systemie Windows 95/98/Me instalacja dla pojedynczego użytkownika nie jest dostępna (zostanie przeprowadzona instalacja dla wszystkich użytkowników komputera).
Dostępne są następujące ustawienia do zmiany domyślnego trybu instalacji:
Ustawia domyślny tryb instalacji na instalację pojedynczego użytkownika, nawet wtedy gdy dostępne są uprawnienia instalacji dla wszystkich użytkowników.
Niepuste klucze, tworzone są podczas instalacji w gałęzi HKCU lub HKLM. Domyślny tryb instalacji zostanie automatycznie ustawiony na poprzednio wybrany tryb, w zależności od lokalizacji klucza rejestru.
Po inicjalizacji, zmienna $MultiUser.InstallMode zawierać będzie bieżący tryb instalacji (AllUsers lub CurrentUser).
Dla poziomów wykonania z uprawnieniami administratora Admin oraz użytkownika zaawansowanego Power, dostępne są tryby instalacji dla pojedynczego użytkownika jak i dla wszystkich użytkowników. Jeśli ustawiony jest poziom wykonania Highest, a użytkownik jest administratorem lub użytkownikiem zaawansowanym, dostępne są również obie opcje.
Zazwyczaj, dobrze jest dać użytkownikowi możliwość wyboru pomiędzy tymi opcjami. Użytkownicy, którzy korzystają z nowoczesnego interfejsu użytkownika, MUI2, mają do dyspozycji specjalną stronę, która zapyta użytkownika o tryb instalacji. Aby skorzystać z tej strony, określ definicję MULTIUSER_MUI, uprzednio dołączając plik nagłówkowy MultiUser.nsh. Następnie makro MULTIUSER_PAGE_INSTALLMODE może być użyte jak normalna strona nowoczesnego interfejsu użytkownika (strona ta zostanie automatycznie pominięta, jeśli instalator działa w systemie Windows 95/98/Me):
!define MULTIUSER_EXECUTIONLEVEL Highest !define MULTIUSER_MUI !define MULTIUSER_INSTALLMODE_COMMANDLINE !include MultiUser.nsh !include MUI2.nsh !insertmacro MULTIUSER_PAGE_INSTALLMODE !insertmacro MUI_PAGE_DIRECTORY !insertmacro MUI_PAGE_INSTFILES !insertmacro MUI_LANGUAGE Polish ... Function .onInit !insertmacro MULTIUSER_INIT FunctionEnd Function un.onInit !insertmacro MULTIUSER_UNINIT FunctionEnd
Ustawienie MULTIUSER_INSTALLMODE_COMMANDLINE, które widzimy w powyższym przykładzie, włącza możliwość ustawienia trybu instalacji poprzez użycie parametrów linii poleceń /AllUsers lub /CurrentUser. Jest to szczególnie przydatne w instalatorach bezokienkowych (cichych).
Dostępne są poniższe ustawienia, do ustalenia tekstów na stronie (dodatkowo dla ogólnej strony nowoczesnego interfejsu użytkownika):
Tekst, który wyświetlany jest na górze strony.
Tekst, który wyświetlany jest na przycisku radiowym instalacji dla wielu użytkowników.
Tekst, który wyświetlany jest na przycisku radiowym instalacji dla pojedynczego użytkownika.
Nazwa użytkownika wyświetlana na przycisku radiowym instalacji dla pojedynczego użytkownika.
Flaga SetShellVarContext (która określa katalogi dla, np. skrótów, jak $DESKTOP) ustawiana jest automatycznie w zależności od trybu instalacji. Dodatkowo, poniższe ustawienia mogą być użyte, aby wykonać dodatkowe akcje, gdy tryb instalacji jest zainicjalizowany:
Nazwa katalogu, w którym zainstalowana zostanie aplikacja, bez ścieżki dostępu. Katalog ten znajduje się w katalogu 'Program Files', dla instalacji dla wielu użytkowników oraz w lokalnym katalogu danych aplikacji, dla instalacji dla pojedynczego użytkownika (jeśli obsługiwane).
Klucz rejestru, w którym zachowany jest uprzednio zapisany katalog instalacji. Dla trybu instalacji dla pojedynczego użytkownika katalog pobierany jest z gałęzi HKCU, a dla trybu instalacji dla wszystkich użytkowników katalog pobierany jest z gałęzi HKLM.
Niestandardowa funkcja, która zostanie wywołana podczas inicjalizacji trybu instalacji, aby ustawić dodatkowe ustawienia, które zależą od trybu.
Aby ręcznie ustalić tryb instalacji, wywołaj jedną z poniższych funkcji:
Instalator: Instalacja dla wszystkich użytkowników
Instalator: Instalacja dla pojedynczego użytkownika
Deinstalator: Instalacja dla wszystkich użytkowników
Deinstalator: Instalacja dla pojedynczego użytkownika