Wix Custom Action Binære Alternativer


Wix Tips Tricks Wix er kraftig, og jeg vil ikke anbefale noe annet installasjonsbygg system for seriøse prosjekter. Uendelig tilpassbar, scriptable, bruker standard MSI-filer, koster ingenting og kanskje best av alt, integreres direkte med Visual Studio. Både Wix selv og MSI-systemet er bygget på, introduserer imidlertid en rekke kjennskap, og læringskurven er ganske, ganske bratt. Og så lærer du det riktige tenkemåte: en fil per komponent, helst tilsatt for hånd. Heres noen diverse tips ingenting for avansert, men verdt å vite alt det samme. Prosjektreferanser Referanser til andre prosjekter i løsningen er kanskje det viktigste ved bruk av Wix, og det som gjør det så flott å bruke. Å legge til en referanse er enkel: Prosjekter du refererer vil bli bygget med installatøren, og i samme konfigurasjon (debugreleasewhatever) også. Ta vare på byggeprosess problemer øyeblikkelig. Og referanser har egenskaper også Du kan angi Wix for å automatisk høste filer som tilhører et prosjekt ved hjelp av HEAT. Kan være nyttig hvis prosjektet ditt inneholder COM-informasjon HEAT er i stand til å behandle, selv om Ive for det meste brukte HEAT fra pre-build-trinn for å hente ting som en katalog full av dokumentasjonsfiler. Havent hadde mye hell med å bruke HEAT på selvregistrerende innfødte. exe-servere, heller. Virkelig kutter ned på hardkodd informasjon og rote rundt med stier i forhold til installatøren din. Installer-versjonen filversjon, versjon i produktnavn Ved å bruke den spesielle varianten (bind. FileVersion.), Kan du stille installasjonsprogrammet ditt for å ha samme versjon som en bestemt fil den refererer til. Jeg liker også å legge til versjonen til produktnavnet, så det er klart hva som skal installeres, og ha produktnavnet som en makro som kan gjenbrukes gjennom installasjonsprogrammet. Forklaringen Ive definert PRODUCT i kode her, men det er bedre å gjøre det i prosjektalternativene: På den måten er makroen global for alle filer i prosjektet. Legge til filer som koblinger I motsetning til Visual C, kopierer du det til en eksisterende fil til et Wix-prosjekt. Legge til filen som en lenke er ekstremt enkel hvis du ikke har vane med å se på flere Ok-knappalternativer i Vanlige Art Dialogger. det er. ComponentGroups and Directories En irriterende ting om Wix-skjemaet er at du ikke kan ha en ComponentGroup inne i DirectoryRef-elementet, eller omvendt. Både ComponentGroup og DirectoryRef-elementene er kritiske for større prosjekter, der en funksjon kan dele komponentgrupper, som i sin tur er definert i forskjellige filer. Dette betyr at du pleier å se kode som Merk hvordan ComponentGroup må inneholde en ComponentRef for hver komponent med andre ord. For hver komponent som er lagt til, må du redigere filen på to steder, noe som er irriterende. Heldigvis, siden versjon 3, støtter Wix en katalogattributt for komponenter: Mye neater. Den eneste ulempen er at katalogen må gjentas for hver komponent. men i praksis finner jeg ikke så mye av et problem. Theres alltid funnestedet fungere, tross alt. MajorUpgrade-elementet Oppgraderinger, oppdateringer og oppdateringer er en av de mest komplekse delene av MSI authoring. Jeg pleier å bare bruke store oppgraderinger (som avinstallerer og installerer produktet på nytt), av følgende grunner: De krever at produktidentifikasjons-ID-en skal endres for hver versjon, som er lett i Wix ved å sette den til. Også utgivelse av mindre oppdateringer betyr at produkt-ID må oppdateres i noen tilfeller, men ikke andre, noe som betyr en mer komplisert arbeidsflyt. De tillater automatisk genererte GUID-er å bli brukt med komponenter, noe som ikke bare gjør det mindre vanskelig å bygge wxs-filer, det betyr også at HEAT-høsting kan gjøres som et pre-build-trinn som re-runs for hver bygge av installatør. Store oppgraderinger tillater at alle funksjonerkomponenter for installatøren omdannes, noe som gjør det enklere å forbedre installatøren etter hvert som utviklingen går. Selvfølgelig er ulempen at du må distribuere en stor MSI-fil selv for enkle oppdateringer. Wix 3.5 introduserte MajorUpgrade-elementet. som er enklere å bruke enn å rote rundt med separate oppgraderings - og oppgraderingsversjonselementer. Heres hvordan jeg bruker den (merk at PRODUCT er en makro definert i prosjektalternativene): Pass på: ID-attributtet til produktelementet må fortsatt settes til Merk også AllowSameVersionUprades-attributtet. MSI installatører ignorerer det fjerde sifferet i produktversjonen. Som standard vil MSI-installatører, hvorav bare det fjerde versjonssifferet er forskjellig, bli installert ved siden av hverandre. Dette fører til forvirrende situasjoner med duplikatoppføringer i addremove-programmer, etc. Ved å sette AllowSameVersionUprades til sann, vil disse versjonene bli installert over hverandre som vanlig, med bivirkningen som det er mulig å nedgradere til versjoner med et lavere fjerde siffer. For versjonssystemer hvor det fjerde sifferet er for eksempel et grennummer, kan dette faktisk være en positiv ting. Merk at AllowSameVersionUpgradesyes genererer en ICE61 advarsel. For å deaktivere den, legg den til ignorerte ICE-valideringene i Wix-prosjektegenskapene (under Verktøyinnstillinger). Det er vanskelig å gjøre noen nontrivial installer uten å ignorere minst noen få ICE advarsler, spesielt når tredjepartssammenhengsmoduler er involvert. Deaktiver Wix prosjekter i Debug bygger Wix prosjekter kan ta ganske lang tid å bygge, og arent alltid virkelig trengte. Jeg foreslår at du laster dem, eller deres løsningsmappe (høyreklikk-Løs ut prosjekter i løsningsmappe) når de ikke behøver. De kan være helt deaktivert i feilsøkingsmodus ved å gå til løsningskonfigurasjonsdialogen og deaktivere dem for DebugAll-plattformer. Wix og Team Foundation Server Team Bygg Arbeide med TFS Team Build kan være en smerte, og få det til å leke godt med Wix tok noen eksperimenter, men det er ikke så vanskelig: Pass på at Wix-prosjekter blir bygget for konfigurasjonen du vil bruke. Som standard og irriterende, er Wix-prosjekter bare bygget for plattformen for plattform, ikke Win32. Sørg for at byggeserverne dine skal bruke Mixed Platforms, eller aktiver Wix-prosjektene for Win32. Pass på at Wix er installert på ditt byggesystem (er). Opprinnelig ønsket jeg å unngå å gjøre det, og fulgte trinnene beskrevet her. sjekker Wix inn i kildetreet. Dette kom med noen store ulemper, skjønt: å måtte redigere hver. wixproj-fil, og Wix-binarieneTeam Build spilte ikke bra når tiden kom for å rydde opp:. Registrer Microsoft. Deployment. WindowsInstaller. dll med GAC, ellers kan Team Build ikke finne den, på en eller annen måte. Start en VS2010 kommandoprompt som administrator: C: Programfiler (x86) Windows Installer XML v3.5bingacutil-i Microsoft. Deployment. WindowsInstaller. dll Microsoft (R) Global Assembly Cache Utility. Versjon 4.0.30319.1 Opphavsrett (c) Microsoft Corporation. Alle rettigheter reservert. Montering er lagt til i hurtigbufferen En ulempe er at Wix-prosjektets utdatafilkatalog ignoreres, og at installatørene dine blir dumpet blant alle de andre binærene. Kan løses ved hjelp av et post-build-trinn hvis du er så tilbøyelig. UAC skjerm på Install-knappen Som standard spør Wix installatører om administratorrettigheter etter å ha trykket på Install-knappen på systemer med UAC aktivert, men ikke vis UAC skjoldet på knappen. Ved å sette InstallScope-attributtet til pakkeelementet til perMachine. skjermen kan gjøres for å vises: Dessverre virker det som om ingen kombinasjon av InstallScope andor InstallPrivilege-innstillinger kan installeres til å bare be om administratorrettigheter når de faktisk er nødvendige, avhengig av installasjonsmappen. Som det står nå, vil brukerne installatører ganske enkelt mislykkes når de installeres til, for eksempel, Programfil-katalogen, mens perMachine-installatører alltid ber om administratorrettigheter. TARGETDIR og systempartisjonen Når du prøver å installere til en underkatalog på systemdriverrotten (f. eks. C: program), kan det hende at du antar at i noe som TARGETDIR refererer til systempartisjonen, da ProgramFilesFolder alltid er gitt som et barn av TARGETDIR . Dette er ikke tilfelle TARGETDIR er partisjonen med den mest ledige diskplassen. Det kan til og med være en partisjon på en ekstern harddisk. For å sette den til den ekte systempartisjonen, bruk nedenstående tilnærming: SetDirectory-elementet kreves når du prøver å bruke WindowsVolume, direkte resulterer i Signering av MSI-er. Hvis du signerer MSI-filene, får de en fin profesjonell UAC-prompt som bekrefter pakken som din . Når du har fått en kodesigneringsnøkkel i. pfx-format, kan du signere en MSI enkelt å gjøre som et Wix-prosjekt etterbyggingstrinn. Pass på at du sender en beskrivelse for pakken, da ellers UAC-spørringen vil vise noe manglet midlertidig filnavn på grunn av hvordan msiexec fungerer. For eksempel: Feilsøking av egendefinerte handlinger En enkel måte å feilsøke dll egendefinerte handlinger på er å få dem til å hakke en meldingskasse ved hjelp av MessageBox Windows-anropet og deretter legge til en feilsøkingsprogram. Sørg for at den aktuelle egendefinerte handlingen er bygget i feilsøkingsmodus hvis du bruker prosjektreferanser til å inkludere den egendefinerte handling dll, vil en feilsøking av Wix-prosjektet også inneholde en feilsøkingsversjon av DLL-en. Få den til å gi en meldingsboks i nærheten av der du vil feilsøke, og legg til Feilfilm-feilsøkeren. Merk at når du kjører en 32-biters tilpasset handling på en 64-biters versjon av Windows, vil en ny msiexec-forekomst ha oppstått å kjøre CA-sjekken Vis prosesser fra alle brukere-boksen for å finne den. Når debuggeren har festet, legg et brytepunkt et sted, trykk F5 for å gjenoppta, klikk OK i meldingsboksen og i bedriften. Opprettet: 18 jan 2012 Modifisert: 12. februar 2012For å lage en database For å opprette en SQL-database, trenger vi først en bruker med de riktige legitimasjonene. Brukernavnet og passordet lagres i egenskaper, du kan bruke noen vanlige brukergrensesnittelementer eller egendefinerte handlinger for å angi dem. Vær oppmerksom på at dette er samme brukerkode vi pleide å opprette en ny brukerkonto, men den ble brukt inne i en komponent-tag da. Utenfor en komponent, vil den ikke opprette brukeren, den vil bare definere legitimasjonene for andre operasjoner som skal brukes. Ettersom kodene, så vel som SQL-funksjonaliteten, er til stede i utvidelsesmoduler, må vi nevne dem i åpningsmerket til kildefilen: Også fordi de tilhører eget navneområde, må vi dekorere dem under bruk: The Opprettelsen av selve databasen går inn i en komponent, som vanlig. SqlDatabase refererer til den forrige brukerdeklarasjonen, angir databasenavnet, serveren og forekomsten. Ikke spesifisering av Server vil gjøre det installert på SQL Server som kjører på målmaskinen. Andre attributter angir hvordan man går videre i ulike situasjoner. ConfirmOverwrite bestemmer hva du skal gjøre hvis databasen allerede eksisterer og CreateOnInstall. CreateOnUninstall. DropOnInstall. og DropOnUninstall attributter dikterer den nødvendige oppførselen ved installering og avinstallasjon. Den nestede SqlScript-taggen bestemmer hva du skal gjøre med den tomme databasen som nettopp er opprettet. Vi kan utføre et gyldig SQL-skript her, bosatt i en egen fil. BinaryKey-attributtet vil gi linken til. sql-skriptfilen. Andre attributter angir oppførselen hvis det oppstår en feil (ContinueOnError), eller bestemmer når man skal utføre skriptet (ExecuteOnInstall. ExecuteOnUninstall. RollbackOnInstall. RollbackOnUninstall). Med mer enn ett skript til stede for utførelse, kan de sekvenseres ved hjelp av sekvensattributtet. Alt som gjenstår er å inkludere. sql-filen: Filen den refererer til vil inneholde vanlige SQL-kommandoer for å lage en database tabell: Når du bygger installasjonspakken, må du koble den til de riktige WiX-modulene: Du kan laste ned hele prøven SQL . Om FireGiant Nå kan du installere med tillit. FireGiant armer deg med nøyaktig støtte fra skaperne av WiX. Fordi det ikke er noen spørsmål vi ikke kan svare på eller problemer vi ikke kan løse, kan du uten tvil frigjøre WiXs full funksjonalitet. kopier 2016 FIREGIANT Legg til en egendefinert handling Dette eksemplet viser hvordan du forfatter en binær egendefinert handling kalt quotFooActionquot. Et vanlig eksempel er en dll-tilpasset handling som starter notepad. exe eller noe annet program som en del av installasjonen. Før du starter, trenger du et eksempel dll som har et inngangspunkt kalt quotFooEntryPointquot. Denne prøven antar at du allerede har gjennomgått Opprett et skjelettutvidelsesemne. Trinn 1: Lag et fragment Du kan direkte referere til egendefinert handling i samme kildefil som produktdefinisjonen. Det vil imidlertid ikke gjøre det mulig å bruke samme tilpassede tiltak andre steder. Så heller enn å sette den egendefinerte handlingsdefinisjonen i samme kildefil, kan vi trene litt modularitet og opprette en ny kildefil for å definere den egendefinerte handlingen kalt quotca. wxsquot. Ok, det er det. Ble gjort med å redigere quotca. wxsquot kildefilen. Den lille koden skal kompilere, men det vil ikke lenke. Husk å koble til krever at du har en oppføringsavdeling. En ltFragmentgt alene er ikke en inngangsseksjon. Gå til neste trinn for å koble kildefilen. Trinn 2: Legg til tilpasset handling Vi må koble denne kildefilen sammen med en kildefil som inneholdt ltProductgt eller ltModuleg for å fullføre. Disse tre linjene er alt du trenger for å legge til i Windows Installer-pakken kildefil for å ringe til quotFooActionquot CustomAction. Nå som vi har to filer for å koble sammen, blir vårt anrop til light. exe litt mer komplisert. Her er kompilering, lenke og installeringstrinn. Nå som en del av installasjonen din, uansett hva quotFooActionquot skal utføre, bør du se det skje etter InstallFiles-handlingen.

Comments

Popular Posts