Proč programy potřebují instalační programy

Ukázalo se, že vývojáři je ve všech směrech skrývají v instalačních programech svých programů a snaží se z toho těžit. Možná by bylo jednodušší obejít se bez instalátorů programů?

Tento záznam ležel v konceptech téměř rok, dokud se nenašel důvod vrátit se k tématu instalátorů, které bylo dáno ... Windows 8. A přestože dnešní příběh nesouvisí přímo s jednou funkcí nového OS Microsoft, další článek mu bude celý věnován.

Pojďme se podívat na hlavní případy použití pro instalační techniky, abychom pochopili, proč jsou potřeba.

Dnes v programu

Kontrola práv k instalaci programu

Toto téma rozvedu podrobněji, protože se dotýká jednoho aspektu vztahu mezi UAC a kompatibilitou programu, o kterém jsem se dříve nedotkl.

V moderních operačních systémech Microsoft je kontrola práv k instalaci programu realizována požadavkem Řízení uživatelských účtů. Do instalačního programu můžete vložit manifest, který vyvolá výzvu UAC při spuštění spustitelného souboru nebo v případě potřeby během procesu instalace.

Pomocí manifestu lze určit tři typy chování instalačního programu:

  • jako Invoker spustí program s právy, která má uživatel v tuto chvíli. Pokud běžíte s právy správce a povoleným UAC, spustí se s normálními právy. Když je Řízení uživatelských účtů zakázáno, program běží s plnými právy.
  • nejvyšší Dostupné zobrazí výzvu UAC správci, ale ne běžnému uživateli.
  • vyžadovatAdministrátora vynutí požadavek Řízení uživatelských účtů, který vyžaduje práva správce.

Například prohlížeč Opera se nejprve rozbalí do dočasné složky, odkud se spustí instalátor. Požadavek UAC se navíc nezobrazuje, protože administrátorská práva jsou potřeba pouze při instalaci prohlížeče pro všechny uživatele.

Pokud zvolíte instalaci do profilu nebo na USB disk, štít UAC okamžitě z tlačítka zmizí.

To je dobrý příklad chytré instalace, i když ne každý IT profesionál tento názor sdílí. Tento přístup koneckonců rozvazuje ruce uživatelům a umožňuje jim instalovat programy do profilu. Správci proto musí k účinnému odepření používat SRP nebo AppLocker.

Úrovně kompatibility programu

Výše uvedené parametry manifestu souvisejí s úrovní kompatibility programu. Ve vlastnostech libovolného spustitelného souboru můžete určit operační systém, se kterým je program kompatibilní.

Tato nastavení se projeví ve vlastním klíči registru (HKCU), ale můžete je použít pro všechny uživatele pod klíčem HKLM.

Editor registru systému Windows verze 5.00 "C: \\ Program Files (x86) \\ PortableSoft \\ BK ReplaceEm \\ replacementm.exe" = "WINXPSP3"

Název parametru je plný cestu k programu a hodnota označuje kompatibilní OS. Ve vlastnostech spustitelného souboru neexistuje způsob, jak určit úroveň práv ke spuštění, ale lze ji zapsat do registru jako hodnotu parametru:

  • RunAsInvoker- aktuální práva
  • Spustit jako nejvyšší- maximální práva, která má uživatel k dispozici
  • RunAsAdmin- povinná administrátorská práva

Mimochodem, režim kompatibility XP vyžaduje plná práva.

Experimentujte s právem ke spuštění programu

Editor registru (regedit.exe) je nastaven na spuštění s maximálními dostupnými právy (RunAsHighest). V praxi to znamená, že:

  • Správce musí souhlasit s požadavkem Řízení uživatelských účtů. V důsledku toho se Editor registru otevře s plnými právy, což umožňuje provádět změny v klíčích registru, kde máte práva k zápisu.
  • Běžný uživatel okamžitě otevře editor registru, ale s omezenými právy, tzn. může provádět změny pouze v HKCU.

Navrhuji provést experiment na příkazovém řádku - to vám umožní obejít se bez vrtění v registru a také odhalí další způsob, jak spustit program s určitými právy.

Experiment má smysl pouze v případě, že máte povoleno Řízení uživatelských účtů.

Přihlaste se jako správce, otevřete příkazový řádek s normálními právy a spusťte Editor registru:

Spusťte regedit

Jako obvykle se zobrazí výzva Řízení uživatelských účtů. Nyní spusťte:

Nastavit __COMPAT_LAYER = RunAsInvoker start regedit / m

První příkaz nastaví proměnnou, která určuje úroveň kompatibility pro všechny programy spuštěné v této relaci konzoly, a druhý spustí další instanci editoru registru (klíč / m). V důsledku toho se otevře s normálními právy.

V Process Exploreru můžete jasně vidět, že první instance (PID 3880) má vysokou úroveň integrity a druhá (PID 7480) má střední úroveň, která odpovídá normálním právům. S těmito právy nebudete moci provádět změny v HKCR a HKLM, jak vám doporučuji ověřit.

Proto můžete vždy spustit regedit s normálními právy, dokonce i jako správce, pokud použijete výše uvedený dávkový soubor nebo zadáte typ spuštění RunAsInvoker v registru.

Editor registru Windows verze 5.00 "C: \\ Windows \ regedit.exe" = "RunAsInvoker"

Vraťme se však k instalátorům.

Zmenšení velikosti instalačního balíčku

Výše jste viděli, že instalační program Opery je nejprve extrahován do dočasné složky ze samorozbalovacího 7zip archivu. Kombinace dobré kompresní rychlosti a licence s otevřeným zdrojovým kódem umožňuje vývojářům zmenšit velikost balíčku a ušetřit na šířce pásma. Není překvapením, že Mozilla používá úplně stejnou strategii, když balí svůj software do 7-zip.

Jiné společnosti mohou používat alternativní nástroje pro kompresi souborů. Microsoft obecně používá formát CAB.

Zkopírujte soubory do určené složky a vytvořte zástupce

Během instalace můžete určit, do které složky se program nainstaluje. Tento postup je primitivní a většina uživatelů jej snadno zvládne i bez instalátoru. Totéž lze říci o vytváření zkratek.

Tyto funkce jsou tedy pro naše pohodlí a úsporu času.

Integrace programů třetích stran

Jak jsme zjistili před rokem, tento trend si získal obrovskou oblibu. Vrátíme-li se k příkladu s AIMP a Yandex.Bar, můžete zvážit dvě možnosti integrace.

Dříve Yandex dodával svůj panel prohlížeče ve formě balíčku MSI, který vývojář zabudoval do instalátoru svého programu. Balíček měl speciální vlastnosti Windows Installer, které vám umožňují flexibilně přizpůsobit instalaci.

Msiexec / i YandexPackSetup.msi YAHOMEPAGE = "y" YAQSEARCH = "y" VENDORSPECIFIC = "nějaký text" / qb

Nyní se instalace stala inteligentnější díky skutečnosti, že panel je načten ze serverů Yandex pouze v případě, že je během instalace zaškrtnuto příslušné políčko.

Je zřejmé, že díky tomuto přístupu se velikost sady pro distribuci programu zmenšila.

Schopnost odebrat a obnovit nainstalovaný program

Poté, co jsem se dotkl tématu MSI, chci rozvést nejoblíbenější typ instalátoru pro střední až velké programy.

Odebírání programů

Pojďme se podívat na proces odinstalace programu dodávaného v balíčku MSI. Mimochodem, může se schovat v libovolném hezkém prostředí instalátoru, například InstallShield.

Balíček je uložen v mezipaměti v databázi Instalační služby systému Windows, ve složce % SystemRoot% \ Installer, kde můžete osvětlit nejasné názvy souborů přidáním sloupce Předmět.

Když odinstalujete program z Ovládacích panelů, systém najde příkaz k odinstalaci v klíči registru

HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ Odinstalovat

Zde má každý program svou vlastní podsekci. Parametr UninstallString obsahuje příkaz Instalační služby systému Windows, který ukazuje na identifikátor balíčku (GUID). Balíček je vyhledáván ve složce % SystemRoot% \ Installer pomocí vlastnosti "Revision".

U jiných instalačních programů může tento parametr obsahovat například cestu k souboru uninstall.exe, který obsahuje pokyny pro odinstalaci.

Obnovení programů

Obnova balíčků MSI je podobná instalaci, ale rozdíl je v tom, že ji potřebujete originál instalační balíček uvedený v parametru InstallSource... Obrázek výše není moc vidět, ale moje cesta ukazuje na dočasnou složku v mezipaměti IE9 (instalaci jsem spustil bez uložení souboru). Protože složka již byla vyprázdněna, obnovení nebude fungovat.

Aby bylo zajištěno úplné obnovení (stejně jako úprava sady součástí), mohou programy uložit své původní instalační soubory do mezipaměti. Někdy se k tomu používá složka ProgramData a Microsoft Office vytvoří skrytou složku MSOCACHE v kořenovém adresáři jednotky.

Je možné odstranit soubory ze složky Windows \ Installer

Pokud na aktuálním systému pracujete relativně dlouho a instalujete různé programy, lze velikost skryté systémové složky % SystemRoot% \ Installer měřit v gigabajtech. Není překvapením, že lidé s malým systémovým oddílem se ptají, zda z něj mohou smazat soubory.

Krátká a jednoduchá odpověď je ne, soubory z této složky nelze smazat.

V praxi to znamená, že odstranění balíčku způsobí, že systém bude mít nesprávné informace o nainstalovaném programu. Tudíž:

  • Obnova přestane fungovat... Výše jste viděli, že Instalační služba systému Windows se pro tuto operaci spoléhá na balíček MSI uložený v mezipaměti a bez něj nic neobnoví.
  • Můžete mít problémy s odinstalováním programu... Pokud začne fungovat nesprávně, budete si určitě muset znovu stáhnout distribuční sadu programu a znovu ji nainstalovat. Položky registru tomu však mohou zabránit, protože systém Windows si myslí, že je program nainstalován.

Ale někdy toto pochopení přichází až po faktu, i když v tomto případě ještě není vše ztraceno.

Odstraňte problémy s instalací nebo odinstalací programů, které používají Instalační službu systému Windows

V zásadě se můžete pokusit odstranit položky registru ručně, ale je lepší použít speciální diagnostický balíček Fix it. Je určen k opravě problémů s instalací a odinstalací programů pomocí Windows Installer (obrázek je přímý odkaz na balíček).

Pokud problém přetrvává, můžete v katalogu softwaru vyhledat nástroj Windows Installer CleanUp.

Jakmile jej společnost Microsoft vydala, aby řešila problémy s instalací Office, ale tento nástroj již není kompatibilní s jeho novými verzemi. Společnost proto již utilitu nedistribuuje ani neudržuje, místo toho vydává univerzální Fix it (pro Office 2013+ existuje samostatná verze).

Registrace komponent a vytváření položek registru

Jakýkoli seriózní softwarový balík (například Microsoft Office) bude určitě vyžadovat plná práva k registraci jeho součástí a knihoven a také k vytváření záznamů v klíči registru HKLM. Takové úlohy, nutné pro normální provoz programu, jsou vždy přiděleny instalačnímu technikovi.

Taková nutnost však není nezbytná pro všechny programy. Nemůžete tedy nainstalovat prohlížeč Opera nebo Firefox, ale zkopírovat soubory rozbalené po spuštění instalátoru do libovolné složky. Po spuštění prohlížeče se ve složce % appdata% vašeho profilu vytvoří samostatná složka pro uložení nastavení a mezipaměti. Zároveň se v klíči registru HKCU objeví položky specifické pro prohlížeč.

Máte tedy „semi-přenosný“ program. Funguje bez instalace, ale zanechává v systému mnoho stop, které lze zakrýt pouze ručně.

Tak či onak si můžete přenést zástupce na plochu nebo hlavní panel, přiřadit prohlížeč k jeho typům souborů a pracovat normálně.

Asociace s typy souborů a registrace ve výchozích programech

Přidružení typů souborů a protokolů k libovolnému programu (například změna výchozího prohlížeče) je uživatelským nastavením, tzn. nevyžaduje administrátorská práva.

Existuje několik způsobů, jak přiřadit program k jeho typům souborů a protokolům, jeden z nich je znázorněn na obrázku výše. Velmi podrobně je rozeberu v dalším příspěvku, protože Windows 8 se v tomto aspektu změnil!

Anketa a diskuze

Jak vidíte, instalátoři softwaru jsou zodpovědní za mnoho úkolů – od primitivního rozbalování souborů a vytváření zástupců až po správu stavu programu a jeho vztahu k typům souborů a protokolům.

Jsem si jist, že mnoho čtenářů mého blogu aktivně používá přenosné programy, což samo o sobě není problém.

Zanedbání instalačního programu programu však může vést k mimořádné situaci, kdy je to nutné pro jeho správnou funkci a konfiguraci, stejně jako pro obnovu a odstranění.

V diskuzi bych vás rád navedl na další příspěvek, který bude jedním z největších na tomto blogu. Zejména mě zajímá, používáte ve svém základní systém přenosný programy, které se sdružují s více než jedním typ souboru(například prohlížeč, textový editor nebo přehrávač médií).

V komentářích prosím uveďte tyto programy a vysvětlete, proč místo plnohodnotných instalačních programů používáte přenosné verze.

Můžete si označit zajímavé úryvky textu, které budou dostupné prostřednictvím jedinečného odkazu ve vašem prohlížeči.