View
219
Download
0
Category
Preview:
Citation preview
Creating Dynamic And Creating Dynamic And Robust Applications With Robust Applications With The WindowsThe Windows®® Installer Installer
Mike KellyMike KellyLead Software Design EngineerLead Software Design EngineerMicrosoft Office TCO TeamMicrosoft Office TCO TeamMicrosoft CorporationMicrosoft Corporation
AgendaAgenda
Office 2000 demand install demoOffice 2000 demand install demo Quick refresher on architectureQuick refresher on architecture Installer API overviewInstaller API overview Install sample application - MsiSpy toolInstall sample application - MsiSpy tool Examine sample application code Examine sample application code
in debuggerin debugger QuestionsQuestions
DemoDemo
Office 2000 demand installOffice 2000 demand install
ArchitectureArchitecture
Installer Package Installer Package and filesand files
File SystemFile System RegistryRegistry
ApplicationsApplications
Shell, COM, Shell, COM, and App MGMT and App MGMT
ClientClient
Active Active DirectoryDirectory
Windows installer APIWindows installer API
Windows installer Windows installer serviceservice
ConfigConfigDataData
Configuration dataConfiguration data Tracks state of Tracks state of
installed appsinstalled apps
Service built into OSService built into OS Service on Windows NTService on Windows NT Performs all Performs all
install operationsinstall operations
APIAPI Install and configure Install and configure
packages and featurespackages and features Query machine stateQuery machine state Build packagesBuild packages
Package formatPackage format Describes required stateDescribes required state
Component 1Component 1(WordCore)(WordCore)
Component 3Component 3(ExcelCore)(ExcelCore)
Component 2Component 2(MS Speller)(MS Speller)
Features, Components, Features, Components, Resources, And Entry PointsResources, And Entry Points
ProductProduct(Office)(Office)
Feature 2Feature 2(Excel)(Excel)
Feature 1Feature 1(Word)(Word)
Entry PointEntry Point(.doc)(.doc)
Entry PointEntry Point(Shortcut)(Shortcut)
Entry PointEntry Point(.xls)(.xls)
Entry PointEntry Point(Shortcut)(Shortcut)
Entry PointEntry Point(CLSID)(CLSID)
ResourceResource(Registry Key)(Registry Key)
ResourceResource(winword.exe)(winword.exe)
ResourceResource(Registry Key)(Registry Key)
ResourceResource(excel.exe)(excel.exe)
ResourceResource(Registry Key)(Registry Key)
ResourceResource(Mssp.dll)(Mssp.dll)
Feature 3Feature 3(Word Speller)(Word Speller)
Feature 4Feature 4(Excel Speller)(Excel Speller)
An Installer-Aware AppAn Installer-Aware App
Feature/component definitions in codeFeature/component definitions in code Get product ID at app initializationGet product ID at app initialization Enable UI based on feature stateEnable UI based on feature state
MsiQueryFeatureStateMsiQueryFeatureState Install features as they are usedInstall features as they are used
MsiUseFeature (“golden pyramid”) MsiUseFeature (“golden pyramid”) Error-trapping approachError-trapping approach
Use installer to find pathsUse installer to find paths MsiProvideComponentMsiProvideComponent MsiProvideQualifiedComponentMsiProvideQualifiedComponent
TCHAR szCoreComponent[] = TEXT("{5CB2D5F5-19DD-11d1-9A9D-006097C4E489}");
if (MsiGetProductCode( szCoreComponent,vszProductCode) != ERROR_SUCCESS)return FALSE;
Installer DatatypesInstaller DatatypesProduct IDProduct ID
Product code - a string GUIDProduct code - a string GUID Can hardcode this or hardcode “core Can hardcode this or hardcode “core
component ID” (e.g. For your EXE)component ID” (e.g. For your EXE) Depends on whether you ship multiple Depends on whether you ship multiple
products with your application or notproducts with your application or not Many installer APIs need product codeMany installer APIs need product code
Installer DatatypesInstaller DatatypesFeature/Component IDsFeature/Component IDs
Feature IDs are text stringsFeature IDs are text strings Limited to MAX_FEATURE_CHARSLimited to MAX_FEATURE_CHARS Internal namesInternal names Evaluated relative to product codeEvaluated relative to product code
Component IDs are GUID stringsComponent IDs are GUID strings Global across all productsGlobal across all products Components have a key file -- use Components have a key file -- use
MsiGetComponentPath or MsiProvideComponent MsiGetComponentPath or MsiProvideComponent to get path to the component key fileto get path to the component key file
Component IDs change when components Component IDs change when components change in incompatible wayschange in incompatible ways
Gives “installed state” of a feature, product Gives “installed state” of a feature, product or componentor component MsiQueryFeatureState MsiQueryFeatureState to obtain for a featureto obtain for a feature Example: spellerExample: speller Remember that components are Remember that components are onlyonly installed as installed as
part of a feature, so feature INSTALLSTATE is part of a feature, so feature INSTALLSTATE is what is interestingwhat is interesting
INSTALLSTATE_LOCALINSTALLSTATE_LOCAL INSTALLSTATE_SOURCEINSTALLSTATE_SOURCE INSTALLSTATE_ABSENTINSTALLSTATE_ABSENT
Feature is not available to be installedFeature is not available to be installed
Installer DatatypesInstaller DatatypesINSTALLSTATEINSTALLSTATE
INSTALLSTATE_ADVERTISEDINSTALLSTATE_ADVERTISED Feature is not installed, but can be installedFeature is not installed, but can be installed Use Use MsiConfigureFeatureStateMsiConfigureFeatureState to install to install
INSTALLSTATE_DEFAULT installs the feature INSTALLSTATE_DEFAULT installs the feature “normally” (either local or source)“normally” (either local or source)
INSTALLSTATE_BROKENINSTALLSTATE_BROKEN Feature is installed, but not intactFeature is installed, but not intact
INSTALLSTATE_SOURCEABSENTINSTALLSTATE_SOURCEABSENT Feature is installed to run from source but the Feature is installed to run from source but the
source is missing (e.g., CD missing, net down)source is missing (e.g., CD missing, net down)
Installer DatatypesInstaller DatatypesINSTALLSTATEINSTALLSTATE
How much work installer should do to How much work installer should do to provide a feature or componentprovide a feature or component MsiUseFeatureExMsiUseFeatureEx MsiProvideComponentMsiProvideComponent MsiProvideQualifiedComponentMsiProvideQualifiedComponent
INSTALLMODE_DEFAULTINSTALLMODE_DEFAULT INSTALLMODE_EXISTINGINSTALLMODE_EXISTING INSTALLMODE_NODETECTIONINSTALLMODE_NODETECTION
Save one Save one GetFileAttributesExGetFileAttributesEx call call
Installer DatatypesInstaller DatatypesINSTALLMODEINSTALLMODE
Used when repairing a featureUsed when repairing a feature Can use in place of INSTALLMODE flagsCan use in place of INSTALLMODE flags MsiReinstallFeatureMsiReinstallFeature MsiReinstallProductMsiReinstallProduct
REINSTALLMODE_FILEMISSINGREINSTALLMODE_FILEMISSING REINSTALLMODE_FILEEXACTREINSTALLMODE_FILEEXACT REINSTALLMODE_FILEVERIFYREINSTALLMODE_FILEVERIFY REINSTALLMODE_MACHINEDATAREINSTALLMODE_MACHINEDATA REINSTALLMODE_USERDATAREINSTALLMODE_USERDATA
Installer DatatypesInstaller DatatypesREINSTALLMODEREINSTALLMODE
Using FeaturesUsing Features
MsiUseFeatureMsiUseFeature when a feature is used when a feature is used Increments feature’s usage count (obtain Increments feature’s usage count (obtain
with with MsiGetFeatureUsageMsiGetFeatureUsage))
If feature not installed, install it!If feature not installed, install it! Use Use MsiConfigureFeatureMsiConfigureFeature to install to install
MsiUseFeatureExMsiUseFeatureEx combines these. combines these. If needed, get path to a component key If needed, get path to a component key
file using file using MsiGetComponentPathMsiGetComponentPath For use with LoadLibrary, CreateFile, etc.For use with LoadLibrary, CreateFile, etc.
ResiliencyResiliencyWhat if LoadLibrary fails?What if LoadLibrary fails?
Features can be brokenFeatures can be broken User deletes file (LoadLibrary fails)User deletes file (LoadLibrary fails) User removes necessary registry info User removes necessary registry info
(CoCreateInstance fails)(CoCreateInstance fails)
Just offer to reinstall the feature!Just offer to reinstall the feature!
UINT MsiReinstallFeature( LPCTSTR szProduct, // product code LPCTSTR szFeature, // feature ID LPCTSTR dwReinstallMode);
Performance TipPerformance Tip
Installer will verify feature install statesInstaller will verify feature install states Registry lookups + one GetFileAttributes Registry lookups + one GetFileAttributes
call per feature component call per feature component
For very commonly used features (e.g., For very commonly used features (e.g., application boot), you can first just look application boot), you can first just look in the “usual place” (e.g., app directory)in the “usual place” (e.g., app directory) If LoadLibrary fails, fall back on installer If LoadLibrary fails, fall back on installer
API to find and/or reinstall featureAPI to find and/or reinstall feature Lose feature usage metrics, some safetyLose feature usage metrics, some safety
Published ComponentsPublished Components
Also called “Qualified Components”Also called “Qualified Components” MsiProvideQualifiedComponentMsiProvideQualifiedComponent MsiEnumComponentQualifiersMsiEnumComponentQualifiers
Very flexible scheme for managing lists Very flexible scheme for managing lists of componentsof components Examples: text converters, wizards, Examples: text converters, wizards,
templates, any per-language componenttemplates, any per-language component
Flexible way of sharing features across Flexible way of sharing features across products without hard coding products without hard coding component IDscomponent IDs
UINT MsiProvideQualifiedComponent( LPCTSTR szCategory, // category GUID LPCTSTR szQualifier, // qualifier string DWORD dwInstallMode, // the install mode LPTSTR lpPathBuf, // in/out path, // NULL if unneeded DWORD *pcchPathBuf); // in/out
Published ComponentsPublished Components
Category GUID not a component ID!Category GUID not a component ID! Think of as “array name”Think of as “array name”
Array index is szQualifierArray index is szQualifier File Type, LCID, etc.File Type, LCID, etc.
Published ComponentsPublished Components{5CB2D5F5-19DD-11d1-9A9D-006097C4E489}{5CB2D5F5-19DD-11d1-9A9D-006097C4E489}
““1033”, “English”1033”, “English”
““1036”, “French”1036”, “French”
““1031”, “German”1031”, “German”
{5CB2D5F5-19DD-11d1-9A9D-006097C4E500}{5CB2D5F5-19DD-11d1-9A9D-006097C4E500}
{5CB2D5F5-19DD-11d1-9A9D-006097C4E501}{5CB2D5F5-19DD-11d1-9A9D-006097C4E501}
{5CB2D5F5-19DD-11d1-9A9D-006097C4E502}{5CB2D5F5-19DD-11d1-9A9D-006097C4E502}
APPDEU.DLLAPPDEU.DLL
APPFRA.DLLAPPFRA.DLL
APPENU.DLLAPPENU.DLL
Published ComponentsPublished Components
UINT MsiEnumComponentQualifiers(UINT MsiEnumComponentQualifiers( LPCTSTR szCategory, // category GUIDLPCTSTR szCategory, // category GUID DWORD iIndex, // 0-based indexDWORD iIndex, // 0-based index LPTSTR szQualifier, // qualifier stringLPTSTR szQualifier, // qualifier string DWORD *pcchQualifier // in/outDWORD *pcchQualifier // in/out LPTSTR szAppData, // AppData stringLPTSTR szAppData, // AppData string DWORD *pcchAppData); // in/outDWORD *pcchAppData); // in/out
Use to populate listboxUse to populate listbox Office 2000: list of languages supportedOffice 2000: list of languages supported
AppData is intended for UIAppData is intended for UI Office 2000: user-readable language nameOffice 2000: user-readable language name
Shell SupportShell Support
““Installer Token”: New form of Shell Installer Token”: New form of Shell shortcut on Internet Explorer 4.01 SP 1 shortcut on Internet Explorer 4.01 SP 1 Shell, Windows 98 and Windows NTShell, Windows 98 and Windows NT®® 5.0 5.0 Encapsulates Product/Feature/ComponentEncapsulates Product/Feature/Component
Can live in Start menu or on DesktopCan live in Start menu or on Desktop Shell will detect that shortcut is an Shell will detect that shortcut is an
Installer Descriptor and invoke installer Installer Descriptor and invoke installer to provide the component pathto provide the component path
Free install on demand for appsFree install on demand for apps Note: only installs product’s main featureNote: only installs product’s main feature
COM SupportCOM Support
““Installer Descriptor” can be used in Installer Descriptor” can be used in COM registry on Windows NT 5.0COM registry on Windows NT 5.0 Same format as Shell shortcutSame format as Shell shortcut
OLE will invoke installer to provide the OLE will invoke installer to provide the component pathcomponent path
Free install on demand for Free install on demand for COM componentsCOM components Note: only installs target featureNote: only installs target feature
DemoDemo
MsiSpy sampleMsiSpy sample
Next StepsNext Steps
Add resiliency to your applicationAdd resiliency to your application Use Published Components to share Use Published Components to share
features across applicationsfeatures across applications Use Windows installer toUse Windows installer to
Make “run from network server” freeMake “run from network server” free Make automated deployment easyMake automated deployment easy Allow users/administrators to tailor Allow users/administrators to tailor
application install size without losing application install size without losing any functionalityany functionality
Use the installer for your application!Use the installer for your application!
Call To ActionCall To Action
Empower your applications for management!Empower your applications for management! Separate user and machine dataSeparate user and machine data
See MGMT 001See MGMT 001 Policy Enable Your ApplicationPolicy Enable Your Application
See MGMT 001, MGMT 006See MGMT 001, MGMT 006 Create a Windows installer packageCreate a Windows installer package
See MGMT 003, MGMT 004See MGMT 003, MGMT 004 Leverage the Windows installer APILeverage the Windows installer API
See MGMT 005See MGMT 005 Leverage Active Directory for Application DataLeverage Active Directory for Application Data
See DS 05, DS 06See DS 05, DS 06
Windows NT 5.0 LogoWindows NT 5.0 Logo
Leverage your investment in Leverage your investment in Windows installerWindows installer Install/uninstall is top concern among customersInstall/uninstall is top concern among customers 1 of 4 key areas of the 1 of 4 key areas of the newnew Windows NT 5.0 logo Windows NT 5.0 logo
Follow up infoFollow up info Draft requirements: Draft requirements:
On the conference DVDOn the conference DVD www.microsoft.com/windows/winlogo/developerwww.microsoft.com/windows/winlogo/developer
Feedback: logotalk@microsoft.com by 11/15Feedback: logotalk@microsoft.com by 11/15
Questions And AnswersQuestions And Answers
Product CodesProduct Codes
Product Product Code
Foo 1.0 A
Foo Pro 1.0 B
Foo Pro 1.1 B
Foo Pro 2.0 C
Recommended