This document discusses improving application installation experiences in Windows 7. It covers making installations faster with fewer prompts by using multi-package transactions. It also discusses per-user deployment which installs applications only for the current user, making installations safer by avoiding impacting other users. The .NET Framework 3.5 SP1 Client Profile is introduced which provides a smaller deployment package focused on client applications.
2. Application Deployment Today
Deploying client applications is becoming
more complex
Larger applications
Multiple packages
Complex dependencies
Difficult to patch
All of this makes for a bad user experience…
3. Application Deployment Today
Long installation times
Multiple UAC prompts
Files left over after a failed install or uninstall
Unnecessary add/remove programs control panel
entries
4. Windows Installer Transaction
Terminology
Acquisition: Determine the
Commit: Finalize the install
Execution: Run
state of the system and update theto
transaction. Therecreateway
script created to is no
an install scripttherun at a later
undo aof to system. While
state commit. R
time. updating the system, create a Acquisition o
Ex: Commit assemblies towhen
rollback script for usage GAC. Phase l
Ex: What version of foo.dll is
needed.
installed? l
I
Ex: Copy foo.dll to the disk.
n b
a
s Execution Foo.msi
c
t Phase
k
a
l
l
Disk Commit Phase
6. Multi-Package Transaction
UAC credential prompt: Per-transaction
versus Per-package
Reboot Handling
Transaction boundary
Multi-package PFR handling
Files in use handling
Transaction owner semantics
Transaction can be embedded in MSI package
7. Multi-Package Transaction Semantics –
Windows Installer
Acquisition Early Execution Acquisition Early Execution Late Commit
Install
Foo.msi Fool.msi
Failure
Rollback
Update the statestate of machine
Acquire the system. the machine. using the install script created in
Update the stateof the the machine.
Acquire the of
acquisition phase.version Foo.exe
1. Backup the oldscripts forofFool. Foo in LIFO order to rollback the
Run the rollback version ofFool and and decide if you want to copy Foo.exe.
Ex: Check the
Sample operations:
2. Note down an undo op-code in rollback script.
transaction Foo.exe if one exists.
1. Backup
3. Copy Fool.exe.
2. Create an undo op-code for this operation.
3. Copy Foo.exe.
8. Windows Installer Patching
Improvements
Requirement: Ability to keep the highest version of a shared component
when a patch to it is uninstalled
Design Change: Windows Installer patch uninstall behavior should consider
the global machine state instead of just the product state
Install Word Install Outlook Apply a patch to Word Uninstall the patch to Word
Word
Word Outlook Word
Word
Word Outlook
Outlook
Patch
Installs Spell Installs Spell Updates Spell Updates Spell
Checker v12.0 Checker v12.5 Checker to v12.6 Checker to v12.0
9. Windows Installer Patching
Improvements
Install Word Install Outlook Apply a patch to Word Uninstall the patch to Word
Word
Word Outlook Word
Word
Word Outlook
Outlook
Patch
Installs Spell Installs Spell Updates Spell Updates Spell
Checker v12.0 Checker v12.5 Checker to v12.6 Checker to v12.5
MSI Datastore
Word’s cache Outlook’s cache Spell
Checker
Spell Checker
12.0
Spell Checker
12.5
12.6
12.0
12.5
10. Introduction to .NET 3.5 SP1
Client Profile
Need for Smaller Framework, typically for Client Apps.
Subset of assemblies already contained within .NET Framework
3.5 Service Pack 1
Contains the Following,
Smaller framework deployment - ~28 MB client deployment
package
Smaller, faster client deployment boot strapper
Client Application focused feature set:
Common Language Runtime (CLR)
ClickOnce and Windows Forms
Windows Presentation Foundation (WPF)
Windows Communication Foundation (WCF)
Visual Studio 2008 SP1 Integration – Applications can be targeted
specifically for the Client Framework subset.
12. Client Profile Configuration
Designer
Designer Tool that will allow developers to customize
the deployment experience of their applications
Uses the Client Profile general purpose bootstrapper to
deploy your application and all its prerequisites.
Can be used to deploy applications requiring the Client
Profile or full .NET Framework 3.5 SP1
14. Application Deployment In Win 7
No major breaking changes
If your installation works on Vista it should
work on Windows 7
Windows Installer 4.5 and .NET Framework SP1
features are in the box
Faster and easier deployment with
fewer dependencies
Performance improvements
Expect to see 10 – 20% reduction in install operation
times for larger applications
Greater application deployment flexibility
Windows Installer 5.0 with per-user
application support
15. The Value Of Per-User Deployment
Personal Empowerment Safer install and removal of Per-
• User is in control User applications
• Standard user installs applications on • Applications are installed to the user’s
users’ schedule (in accordance with profile
policy) • Removes risk of corrupted OS state
• One user installing an application
doesn’t impact another user
• No elevation necessary for
installation
16. Considering Per-User deployment
Per-User applications do not support some
important OS extension points
Set Program Access & Computer Defaults (SPAD)
Default Programs
Additionally…
Any machine-wide prerequisites must
be installed separately
Your package can not install services or drivers
Your application can not have a core purpose to serve
all users of the computer, such as anti-virus
Patching can only be done when the user is logged-on
Per-User deployment is only available on Windows 7
17. Target Standard User
UAC is training wheels for Standard User
UAC heuristics detect installers, elevate
your installer even if you did not manifest it
UAC “virtualizes” (fakes) system
resources so your application can
still think it is bopping HKLM
Do not rely on this stuff
It is here for legacy, not for new code
It is disabled for 64-bit Processes
Your code is future-safe if you
target the true Standard User
19. For the Requesting User
Install for the requesting user,
not the current user
If user is a Standard User (OTS) then
when they elevate, they become a
completely different user
If an application then installs into the current user’s home
folder, it will be the Administrator
Best: Don’t configure user during install
Instead, do user configuration on first run
Include a manifest in your package
Mark “asInvoker”
Visual Studio 2008 adds manifests by default
Don’t have anything with “setup” or “install” in the file name