Authoring to Windows Installer 4.0 Features mentioned at PDC 2005
As Tyler
recently mentioned, you can find the Professional Developers Conference 2005
session and
presentation of the Windows Installer 4.0. Here's a preliminary view of how to author to these features.
Note: This documentation is preliminary and is subject to change.
Restart Manager Support
As Tyler presented in the slide titled "Windows Installer 4.0: Fewer Reboots", Restart Manager support in MSI just requires MsiRMFilesInUse be present in the package when installing on Windows Vista. This dialog looks a lot like the FilesInUse dialog with a couple of radio buttons added under the list box to represent the new Restart Manager Option along with the fallback option to the old behavior.
Control Table
| Dialog_ |
Control |
Type |
X |
Y |
Width |
Height |
Attributes |
Property |
Text |
Control_Next |
Help |
| MsiRMFilesInUse |
DlgLine |
Line |
0 |
234 |
294 |
0 |
1 |
|
|
|
|
| MsiRMFilesInUse |
Banner |
Bitmap |
0 |
0 |
374 |
44 |
1 |
|
NewBinary1 |
|
|
| MsiRMFilesInUse |
DlgDesc |
Text |
21 |
23 |
292 |
25 |
65539 |
|
Some files that need to be updated are currently in use. |
|
|
| MsiRMFilesInUse |
DlgTitle |
Text |
13 |
6 |
292 |
25 |
65539 |
|
{&MSSansBold8}Files in Use |
|
|
| MsiRMFilesInUse |
DlgText |
Text |
21 |
49 |
348 |
17 |
3 |
|
The following applications are using files that need to be updated by this setup. |
|
|
| MsiRMFilesInUse |
BannerLine |
Line |
0 |
44 |
374 |
0 |
1 |
|
|
|
| MsiRMFilesInUse |
RadioButtonGroup1 |
RadioButtonGroup |
19 |
187 |
343 |
40 |
16777219 |
ShutdownOption |
|
List |
|
| MsiRMFilesInUse |
List |
ListBox |
21 |
66 |
331 |
118 |
7 |
FileInUseProcess |
|
OK |
|
| MsiRMFilesInUse |
OK |
PushButton |
228 |
244 |
66 |
17 |
3 |
|
OK |
Cancel |
|
| MsiRMFilesInUse |
Cancel |
PushButton |
299 |
244 |
66 |
17 |
3 |
|
Cancel |
RadioButtonGroup1 |
|
ControlEvent Table
| Dialog_ |
Control_ |
Event |
Argument |
Condition |
Ordering |
| MsiRMFilesInUse |
OK |
EndDialog |
Return |
1 |
1 |
| MsiRMFilesInUse |
OK |
RMShutdownAndRestart |
0 |
ShutdownOption="ShutdownOption1" |
2 |
| MsiRMFilesInUse |
Cancel |
EndDialog |
Exit |
1 |
1 |
Dialog Table
| Dialog |
HCentering |
VCentering |
Width |
Height |
Attributes |
Title |
Control_First |
Control_Default |
Control_Cancel |
| MsiRMFilesInUse |
50 |
50 |
374 |
266 |
19 |
[ProductName] |
OK |
OK |
Cancel |
Property Table
| Property |
Value |
| ShutdownOption |
ShutdownOption1 |
RadioButton Table
| Property |
Order |
Value |
x |
Y |
Width |
Height |
Text |
Help |
| ShutdownOption |
1 |
1 |
6 |
9 |
331 |
14 |
Automatically close all applications and attempt to restart them after setup is complete. |
|
| ShutdownOption |
2 |
2 |
6 |
21 |
322 |
17 |
Do not close applications. (A reboot will be required.) |
|
Elevation Privleges Not Required
As Tyler presented in the slide titled "What's new in MSI: UAP Elevation and Installs and Patches", you can set the msidbSumInfoSourceTypeLUAPackage bit in the Summary Information Stream of a MSI and prevent the Windows Installer from invoking the UAP elevation prompt. To do this, one just needs to set the 4th position (0x08) in the Word Count property. You can do this with the Windows Installer SDK tool msiinfo.exe. As an example, here's the command and output before setting the bit
c:\>msiinfo product.msi
ClassId = {000C1084-0000-0000-C000-000000000046}
[ 1][/c] Codepage = 1252
[ 2][/t] Title = Installation Database
[ 3][/j] Subject = Testing
[ 4][/a] Author = Microsoft Corp.
[ 5][/k] Keywords = Installer,MSI,Database
[ 6][/o] Comments = Contact: Your local administrator
[ 7][/p] Template(MSI CPU,LangIDs) = Intel;1033
[ 9][/v] Revision = {62B8B42B-9D2E-49C2-A791-C90F212940B8}
[12][/r] Created = 2005/10/25 23:00:48
[13][/q] LastSaved = 2005/10/25 23:00:48
[14][/g] Pages(MSI Version Used) = 200
[15][/w] Words(MSI Source Type) = 0
<snip>
Then one runs msiinfo with the /W switch to set the Word Count property like so
c:\msiinfo product.msi /W 8
Then rerun the view to confirm the setting took like so
c:\>msiinfo product.msi
ClassId = {000C1084-0000-0000-C000-000000000046}
[ 1][/c] Codepage = 1252
[ 2][/t] Title = Installation Database
[ 3][/j] Subject = Testing
[ 4][/a] Author = Microsoft Corp.
[ 5][/k] Keywords = Installer,MSI,Database
[ 6][/o] Comments = Contact: Your local administrator
[ 7][/p] Template(MSI CPU,LangIDs) = Intel;1033
[ 9][/v] Revision = {62B8B42B-9D2E-49C2-A791-C90F212940B8}
[12][/r] Created = 2005/10/25 23:00:48
[13][/q] LastSaved = 2005/10/25 23:00:48
[14][/g] Pages(MSI Version Used) = 200
[15][/w] Words(MSI Source Type) = 8
<snip>
Windows Vista Multilingual User Interface (MUI) Shortcut Support
As Tyler presented in the slide titled "What's new in MSI: More...", you can now add Windows Vista Multilingual User Interface (MUI) Shortcut support to your MSI. The way you do this is to add for new columns to the Shortcut Table of your MSI. These are rows DisplayResourceDLL, DisplayResourceId, DescriptionResourceDLL, DescriptionResourceId placed as follows:
| Column |
Type |
Key |
Nullable |
| Shortcut |
Identifier |
Y |
N |
| Directory_ |
Identifier |
|
N |
| Name |
Filename |
|
N |
| Component_ |
Identifier |
|
N |
| Target |
Shortcut |
|
N |
| Arguments |
Formatted |
|
Y |
| Description |
Text |
|
Y |
| Hotkey |
Integer |
|
Y |
| Icon_ |
Identifier |
|
Y |
| IconIndex |
Integer |
|
Y |
| ShowCmd |
Integer |
|
Y |
| WkDir |
Identifier |
|
Y |
| DisplayResourceDLL |
Formatted |
|
Y |
| DisplayResourceId |
Integer |
|
Y |
| DescriptionResourceDLL |
Formatted |
|
Y |
| DescriptionResourceId |
Integer |
|
Y |
Both the DisplayResourceDLL and DescriptionResourceDLL values represent fully qualified paths to files on disk that the MUI system will load (per the Windows Vista protocol) to get the localized strings. Both the DisplayResourceDId and DescriptionResourceId represent the resource index of the string of interest. This integer is non-negative and will be negated before the call to the Shell API to reguster the MUI shortcuts.