Kaj zaganjalnik zapiše in sporoči
Ta stran opisuje način 1.0: datoteke formata 1, katerih komponente nimajo datoteke registration.json. Za namestitveni
program 2.0 (format 2 ali komponente z registration.json), ki odregistrira in odstrani, kar je namestil, glejte
Namestitveni program.
Opisuje, kaj Wkl.Bootstrapper.exe pusti v računalniku, kako se konča klic in kaj sporoči /diagnose. S temi
podatki lahko pozneje preverite namestitev, odstranite aplikacijo (glejte
Odstranitev aplikacije iz računalnika) ter na podlagi diagnostike
pišete skripte ali zahtevke za podporo.
Kako se konča klic
Zaganjalnik ne čaka na Access. Preveri računalnik, po potrebi registrira komponente, nastavi zaupanja vredno mesto,
namesti kopijo različice, zažene MSACCESS.EXE in dve sekundi spremlja novi proces. Nato se konča:
| Izhodna koda | Pomen |
|---|---|
0 | Access se je zagnal z uporabnikovo kopijo in je dve sekundi pozneje še vedno tekel. To ne pomeni, da je aplikacija odprla svoj prvi obrazec: napaka v zagonski kodi aplikacije se prikaže v programu Access, ko se je zaganjalnik že končal. |
60 | Programa Access ni bilo mogoče zagnati ali pa se je končal v teh dveh sekundah (zavrnjena datoteka, manjkajoč sklic, pravilnik). |
| katera koli druga | Prvi manjkajoči del, označen s svojo kodo; glejte Kode napak zaganjalnika. Zagnano ni bilo nič. |
Izhodna koda je ista številka, ki jo prikaže okno z napako, in prva številka izpisa /diagnose. Brez stikala se
zaganjalnik konča, ko uporabnik zapre okno z napako; z /quiet ne prikaže ničesar in se konča takoj. Med vsem tem je
začetno okno prikazano kot pozdravno okno (start.splash.duration; pri vrednosti 0 se okno napredka prikaže samo, če
namestitev kopije ali registracija traja dlje kot 0,8 sekunde).
Različice
Zaganjalnik vedno namesti in zažene različico, ki jo navaja app-manifest.json v viru. Brez deliveryKey te različice
nikoli ne primerja s kopijami v profilu: tudi nižja različica kot prej se namesti in zažene – tako se izdaja vrne na
prejšnjo različico. Z deliveryKey (od različice 2.2.4) se različica, nižja od kdaj koli nameščene, namesti samo, če
podpisana izdaja umakne višjo; sicer se zažene nameščena različica (koda 52, glejte Podpisane izdaje).
| Pravilo | |
|---|---|
Oblika version | Dve do štiri števila, ločena s pikami, vsako z eno do petimi števkami: 1.4, 1.4.0, 0.1.123.4. Črke, pripone, kot je 0.1.0-demo, ter besedilo pred številko ali za njo zaganjalnik zavrne s kodo 11 (Nastavitev aplikacije ni mogoče prebrati); deploy.version orodja za gradnjo se zapiše kot ta vrednost. |
| Vrstni red | Številsko, del za delom: 0.1.10 je novejša od 0.1.9. V vseh različicah uporabljajte enako število delov: 1.4 in 1.4.0 sta različni različici, 1.4 pa velja za starejšo. |
| Ohranjene različice | Najnovejših keepVersions po tem vrstnem redu ter vedno različica, ki se zaganja, in lastWorkingVersion – različica, ki je bila zagnana nazadnje (ne nujno najvišja) in je po vsakem uspešnem zagonu zabeležena v State\provisioning.json. Mapa, katere kopija je odprta v programu Access (obstaja njena datoteka .laccdb), se nikoli ne odstrani. |
| Ista različica, druga datoteka | Nova zgoščena vrednost SHA-256 za različico, ki je že nameščena, šteje kot nova izdaja: kopija se znova namesti v isto mapo Frontends\<version>, vsebina uporabnikove kopije pa se zamenja. Dokler je ta kopija odprta v programu Access, stare mape ni mogoče umakniti: zagon se konča s kodo 41 (Aplikacije ni bilo mogoče kopirati v uporabniški profil), odprta kopija ostane nespremenjena, naslednji zagon po zaprtju programa Access pa namesti novo datoteko (Windows ne dovoli premakniti mape, v kateri je odprta datoteka). Temu se izognete tako, da vsaki gradnji dodelite svojo različico. |
Mape v uporabnikovem profilu
Vse, kar pripada eni aplikaciji, je pod %LOCALAPPDATA%\WKL\<product>, pri čemer je <product> vrednost product v
bootstrapper.json:
| Mapa | Vsebina |
|---|---|
Frontends\<version>\ | Uporabnikova kopija vsake različice, z datoteko INI iz ini, če je nastavljena. Ostane najnovejših keepVersions različic, vedno pa tista, ki teče, in tista, ki se je nazadnje zagnala; različica, ki je v uporabi, se nikoli ne odstrani. |
State\provisioning.json | Kaj je bilo nameščeno: version, file, sha256 in size izdaje, s katero je bila kopija primerjana, writeTicks, lastWorkingVersion. |
State\news-seen.txt | Od različice 3.3.0, samo z razširjenim pogledom: datum najnovejšega vnosa med novostmi, ki ga je pokazal razširjeni pogled. |
State\last-start-failed | Od različice 3.3.0, samo z display.mode auto: obstaja, če zadnji zagon ni uspel; uspešen zagon datoteko odstrani. |
Logs\bootstrapper.log | Dnevnik (spodaj). |
Komponente WKL, ki jih prinaša izdaja aplikacije, se za vsako različico ter za 32- in 64-bitno izvedbo enkrat kopirajo v
%LOCALAPPDATA%\WKL\Components\<release>\<x86|x64>\ in se registrirajo od tam. To mapo si delijo vse uporabnikove
aplikacije, ki izdajajo komponente.
Iz shrambe po vsebini (od različice 3.3.0) zaganjalnik vsebine datotek prenese v
predpomnilnik %LOCALAPPDATA%\WKL\Store\: objects\<ab>\<sha256> za vsako vsebino datoteke in
manifests\<product>\<version>.json za vsako nameščeno različico. Predpomnilnik si delijo vsi uporabnikovi izdelki; po
vsaki namestitvi in ob odstranitvi z /uninstall zaganjalnik odstrani, česar ne navaja nobena nameščena različica več.
Zaganjalnik sejo brez trajne namestitve (session v projektni datoteki, od različice 3.3.0) zabeleži v
%LOCALAPPDATA%\WKL\Sessions\<product>.json (izdelek, proces zaganjalnika in ali je seja izdelek namestila), datoteko
pa izbriše, ko počisti; glejte
Zagon aplikacije brez trajne namestitve.
Dnevnik
%LOCALAPPDATA%\WKL\<product>\Logs\bootstrapper.log, UTF-8, ena vrstica za vsak korak: čas, ID procesa, korak,
besedilo. Pri velikosti 1 MB se datoteka preimenuje v bootstrapper.1.log (ohrani se pet starejših datotek). Dnevnik
nikoli ne vsebuje vrednosti INI, gesel ali povezovalnih nizov. /diagnose ne piše v dnevnik.
| Korak | Besedilo |
|---|---|
start | izdelek in različica zaganjalnika |
manifest | izdelek, različica, datoteka, cilj, bitness in runtime iz app-manifest.json |
environment | Access, registracija WKL, .NET Desktop Runtime |
components | pot do registrirane knjižnice DLL (samo če aplikacija potrebuje komponente WKL) |
trust | zaupanja vredna mapa |
placement | Samo način 1.0: placed <path>, če je bila kopija nameščena zdaj, in place <path>, če je bila uporabljena obstoječa kopija |
install | Namestitveni program 2.0: install <version> <copy> components <release> za vsako nameščeno različico (glejte Kdaj namešča 2.0 in kdaj teče 1.0) |
end | koda, ime in podrobnost izida |
settings | dejanja okna z nastavitvami: nastavitev komponent, zavrženje ali zagon različice, čiščenje |
Dokaz namestitve (namestitveni program 2.0). Katere izdaje prevzame namestitveni program 2.0, navaja razdelek
Kdaj namešča 2.0 in kdaj teče 1.0; zanje je dokaz vrstica dnevnika
install <version> <copy> ... skupaj z izpisom /list /json (nameščene različice in njihove komponente iz podatkovne zbirke
namestitvenega programa). State\provisioning.json se ne zapiše, vrstica placement pa se ne pojavi. Če preizkus
namestitev odstrani ročno, ostaneta njen vnos v nastavitvah sistema Windows (Aplikacije) in njen
zapis v podatkovni zbirki namestitvenega programa; zato jo odstranite z /uninstall /quiet.
Dokaz namestitve kopije (način 1.0). Kopija se preveri, preden se namesti: zaganjalnik izdajo kopira v začasno
mapo, njeno velikost in zgoščeno vrednost SHA-256 primerja z app-manifest.json in šele nato mapo preimenuje v
Frontends\<version>. Vrstica placed <path> torej pomeni, da je bila kopija v tistem trenutku enaka manifestu; ob
razliki se zagon konča s kodo 42 in ne namesti ničesar. State\provisioning.json zabeleži sha256 in size manifesta
za to namestitev. Velikost in zgoščena vrednost SHA-256 same kopije se ne beležita: Access datoteko ob
odpiranju spremeni (tudi ACCDE, odprto z /runtime), zato se po prvem zagonu z manifestom tako ali tako ne bi ujemali.
Zaupanja vredno mesto
Zaganjalnik mapo Frontends za uporabnika nastavi kot zaupanja vredno mesto programa Access, skupaj s podmapami, zato se
kopije odprejo brez varnostnega opozorila:
| Ključ | HKEY_CURRENT_USER\Software\Microsoft\Office\16.0\Access\Security\Trusted Locations\WKL.<product> |
Path | %LOCALAPPDATA%\WKL\<product>\Frontends\ (razširjeno, s končno poševnico nazaj) |
AllowSubfolders | 1 (DWORD) |
Description | WKL <product>: Anwendung des Benutzers (Wkl.Bootstrapper) |
Zaganjalnik ga preveri ob vsakem zagonu in ga zapiše samo, če se Path ali AllowSubfolders razlikujeta; nikoli ga ne
odstrani. Če pravilnik skupine zaupanja vredna mesta izklopi ali dovoli samo mesta iz pravilnika, se zagon konča s kodo
Registracija komponent
Če izdaja aplikacije prinaša komponente WKL (components v bootstrapper.json), uporabnikova registracija pa manjka ali
je starejša, kot jo potrebuje aplikacija, zaganjalnik na kopiji v %LOCALAPPDATA%\WKL\Components\... zažene
regsvr32 /s /n /i:user v isti 32- ali 64-bitni različici, kot jo ima Access. Ta ukaz zapiše iste ključe pod
HKEY_CURRENT_USER\Software\Classes kot lastna registracija paketa različice. Dovolj nova registracija ostane
nespremenjena, odregistracije pa zaganjalnik nikoli ne izvede. Prav tako ne zamenja registracije druge glavne
različice iste knjižnice tipov, ki jo še potrebuje druga aplikacija; zagon se ustavi s kodo 37. Zaganjalnik registrira
knjižnico DLL, ki jo navaja datoteka registration.json v mapi components (paketi pred izdajo 1.57 knjižnice WKL
Forms Object Library te datoteke nimajo; pri njih je to Wkl.Access.Components.dll). Od različice WKL Bootstrapper 3.2
naprej obstoječo registracijo prepozna po
identifikatorju LIBID knjižnice tipov in njeni različici (HKEY_CURRENT_USER\Software\Classes\TypeLib\{LIBID}), ne po
imenih datotek ali identifikatorjih ProgID, zato nova izdaja knjižnice, tudi s preimenovanimi datotekami, ne potrebuje
novega zaganjalnika. Knjižnice WKL Office JSON, na katero se nekatere aplikacije prav tako sklicujejo, zaganjalnik s
projektno datoteko v formatu 1 ne namesti in ne preveri; projektna datoteka v formatu 2 jo registrira z vnosom
registerCom. Katere
ključe
registracija zapiše in odstrani, opisuje dokumentacija izdelka
WKL Forms Object Library (Kaj zapiše registracija za posameznega uporabnika).
/diagnose in /diagnose /json
/diagnose izvede vsa preverjanja zagona, ne da bi karkoli spremenil (brez registracije, brez zaupanja vrednega mesta,
brez kopije, brez dnevnika), in izpiše izid; /json ga izpiše kot en objekt JSON. Izhodna koda je code.
| Polje | Vrsta | Vsebina |
|---|---|---|
code | število | Izid: 0, če bi zagon uspel, sicer koda napake. |
name | niz | Ime izida, na primer Ok, OdbcDriverMissing. |
detail | niz | Tehnična podrobnost; pri 0 „<product> <version> can start.“ |
bootstrapper | niz | Različica in gradnja zaganjalnika, na primer 1.0.1+2f46abe.... |
product | niz | product iz bootstrapper.json. |
version | niz | Različica v datoteki app-manifest.json vira. |
file | niz | <file>, <target>, <bitness> iz manifesta. |
source | niz | Izvorna mapa kot polna pot. |
placed | niz | Mape različic v uporabnikovem profilu, ločene z vejico; nothing yet, če ni nobene. |
windows | niz | Ali je Windows 32- ali 64-biten. |
access | niz | Izdaja (polna ali Runtime), 32- ali 64-bitna izvedba, različica in pot programa Access ter način, kako je bil najden, ali not found. |
components | niz | Registrirana različica WKL (različica knjižnice tipov), za uporabnika ali računalnik, in pot do knjižnice DLL ali not registered. |
desktopRuntime | niz | Najvišji .NET 10 Desktop Runtime v isti 32- ali 64-bitni različici, kot jo ima Access, ali no .NET 10 Desktop Runtime. |
odbcDrivers | polje nizov | <name>: installed ali <name>: missing za vsak vnos v odbcDrivers. |
odbcDataSources | polje nizov | Od 1.0.1: <name>: present ali <name>: missing or other bitness za vsak vnos v odbcDataSources. |
paths | polje nizov | Mapi Frontends in Logs izdelka. |
plan | polje nizov | Od 2.0, za projektno datoteko formata 2, ki se lahko zažene: kaj bi zagon namestil in kam – mapa različice, vsak vnos z datotekami (<source> -> <target>, zamaknjeno), ključi registra, datoteka INI, bližnjice in cilj zagona. Sicer prazno. |
/whatif <file> izvede enako diagnostiko za katero koli projektno datoteko (relativne poti se razrešijo glede na mapo
te datoteke), zato je projekt mogoče preizkusiti, preden ga izdate; z /json je vsak znak zunaj nabora ASCII zapisan
kot ubežno zaporedje (\uXXXX), zato je izpis v kateri koli kodni strani enak.
Diagnostika se ustavi pri prvem neuspelem preverjanju, zato so polja za njim lahko prazna: pri kodi 10 ali 11 so
izpolnjena samo code, name, detail, bootstrapper in windows. Nova polja se samo dodajajo; skript naj polja, ki
jih ne pozna, prezre.
Več zaganjalnikov hkrati
Zaganjalniki z različnimi vrednostmi product so neodvisni: vsak ima svoje mape, dnevnik, stanje in zaupanja vredno
mesto, obe aplikaciji pa sta lahko odprti hkrati. Zagon počaka na drug zagon istega izdelka istega uporabnika,
medtem ko ta namešča različico (mutex za vsak izdelek in sejo sistema Windows, največ dve minuti, nato koda 41). Izdelki si delijo mapo
s komponentami in uporabnikovo registracijo komponent WKL: ko ena aplikacija registrira novejšo različico, jo uporablja tudi
druga (starejša aplikacija še naprej teče na novejši različici; glejte dokumentacijo izdelka WKL Forms Object Library,
Uvajanje aplikacije s kontrolniki WKL v računalnike uporabnikov).