Discussion:
Uninstall does not call custom action - .NET
(too old to reply)
Neville Lang
2004-08-23 01:34:33 UTC
Permalink
Hi all,

I have VS .NET 2003 and have created a solution that installs part of my app
onto a desktop and the main part onto a Pocket PC. Both parts of this app
interwork with each other when the Pocket PC is sitting in the cradle.

For installation, I use Windows Installer and use the custom action feature
to provide custom code for installing both the desktop part and the Pocket
PC part (using RAPI). I also use the custom action feature to provide code
for removing the various parts of the program on the Pocket PC as well as
the desktop. This approach enables a complete removal of all files, folders
and registry entries on both platforms.

For over a year, debugging both my custom install and removal methods has
worked well. Now, for some reason, I am unable to debug the removal method
called by the Uninstaller using VS .NET 2003. Previously, I did this by
using the debug version of my CustomInstaller.dll in the .MSI (Build
Solution in VS .NET). I use a MessageBox.Show() in my method so when the
uninstaller calls my method, processing is halted due to the MessageBox
enabling me to attach the debugger to the Process, set a breakpoint and then
continue to step past the MessageBox now using the debugger.

What I have now found is that my removal method is now not called by the
Uninstaller. I searched for something like this on Google and there were
several items with somewhat similar symptoms although I do not think they
were for .NET. On one post, Phil Wilson indicated that you could run the
MSIZAP program. I followed his advice by running Windows Install Clean Up
(which uses MSIZAP) after the app is installed. This action, I thought, may
remove any install and/or version entries hidden away. However, after a
fresh installation, the uninstaller still did not call my .NET method for
the custom action.

Any others ideas on why the method is not called would be welcome.

Regards,
Neville Lang

P.S. I have posted this message on "microsoft.public.platformsdk.msi",
"microsoft.public.windows.msi" and "microsoft.public.windows.msi".
Phil Wilson
2004-08-23 16:50:30 UTC
Permalink
The MsiZap utility is intended for removal of products installed with MSI
that can't be uninstalled for some reason. That's not the same as your
uninstall custom action not being called, because that means that the
product is uninstalled in the MSI sense, but that your CA wasn't called so
some files were not removed. You can log an uninstall with:
msiexec /x {your product code guid} /l*v somelogfile.log
and there may be some clues as to what's happening.
--
Phil Wilson [MVP Windows Installer]
----
Post by Neville Lang
Hi all,
I have VS .NET 2003 and have created a solution that installs part of my app
onto a desktop and the main part onto a Pocket PC. Both parts of this app
interwork with each other when the Pocket PC is sitting in the cradle.
For installation, I use Windows Installer and use the custom action feature
to provide custom code for installing both the desktop part and the Pocket
PC part (using RAPI). I also use the custom action feature to provide code
for removing the various parts of the program on the Pocket PC as well as
the desktop. This approach enables a complete removal of all files, folders
and registry entries on both platforms.
For over a year, debugging both my custom install and removal methods has
worked well. Now, for some reason, I am unable to debug the removal method
called by the Uninstaller using VS .NET 2003. Previously, I did this by
using the debug version of my CustomInstaller.dll in the .MSI (Build
Solution in VS .NET). I use a MessageBox.Show() in my method so when the
uninstaller calls my method, processing is halted due to the MessageBox
enabling me to attach the debugger to the Process, set a breakpoint and then
continue to step past the MessageBox now using the debugger.
What I have now found is that my removal method is now not called by the
Uninstaller. I searched for something like this on Google and there were
several items with somewhat similar symptoms although I do not think they
were for .NET. On one post, Phil Wilson indicated that you could run the
MSIZAP program. I followed his advice by running Windows Install Clean Up
(which uses MSIZAP) after the app is installed. This action, I thought, may
remove any install and/or version entries hidden away. However, after a
fresh installation, the uninstaller still did not call my .NET method for
the custom action.
Any others ideas on why the method is not called would be welcome.
Regards,
Neville Lang
P.S. I have posted this message on "microsoft.public.platformsdk.msi",
"microsoft.public.windows.msi" and "microsoft.public.windows.msi".
Neville Lang
2004-08-24 14:03:09 UTC
Permalink
Phil,

Thank you for your reply.

I created a log file as you suggested. I guess my next problem is that is
cannot completely follow all of the entries in the log file. Is there a
source on the internet that might make reading a log file more clear? In
particular, should it tell me when the Custom Action is called?

This is the first time I have had to delve into the .MSI file and so I am
relatively new to the depths of Windows Installer though I have been using
it for over a year. This is the first problem I have had to follow up.

As background, my MSI file is auto. created by Visual Studio .NET 2003 when
I build my .NET solution. I also have ORCA but I am still unable to work out
exactly what I am seeing.

BTW, I have just ordered your book from Amazon.com so that I hope to get my
head around the Window Installer a bit more.

Regards,
Neville Lang
Post by Phil Wilson
The MsiZap utility is intended for removal of products installed with MSI
that can't be uninstalled for some reason. That's not the same as your
uninstall custom action not being called, because that means that the
product is uninstalled in the MSI sense, but that your CA wasn't called so
msiexec /x {your product code guid} /l*v somelogfile.log
and there may be some clues as to what's happening.
--
Phil Wilson [MVP Windows Installer]
----
Post by Neville Lang
Hi all,
I have VS .NET 2003 and have created a solution that installs part of my
app
Post by Neville Lang
onto a desktop and the main part onto a Pocket PC. Both parts of this app
interwork with each other when the Pocket PC is sitting in the cradle.
For installation, I use Windows Installer and use the custom action
feature
Post by Neville Lang
to provide custom code for installing both the desktop part and the Pocket
PC part (using RAPI). I also use the custom action feature to provide code
for removing the various parts of the program on the Pocket PC as well as
the desktop. This approach enables a complete removal of all files,
folders
Post by Neville Lang
and registry entries on both platforms.
For over a year, debugging both my custom install and removal methods has
worked well. Now, for some reason, I am unable to debug the removal method
called by the Uninstaller using VS .NET 2003. Previously, I did this by
using the debug version of my CustomInstaller.dll in the .MSI (Build
Solution in VS .NET). I use a MessageBox.Show() in my method so when the
uninstaller calls my method, processing is halted due to the MessageBox
enabling me to attach the debugger to the Process, set a breakpoint and
then
Post by Neville Lang
continue to step past the MessageBox now using the debugger.
What I have now found is that my removal method is now not called by the
Uninstaller. I searched for something like this on Google and there were
several items with somewhat similar symptoms although I do not think they
were for .NET. On one post, Phil Wilson indicated that you could run the
MSIZAP program. I followed his advice by running Windows Install Clean Up
(which uses MSIZAP) after the app is installed. This action, I thought,
may
Post by Neville Lang
remove any install and/or version entries hidden away. However, after a
fresh installation, the uninstaller still did not call my .NET method for
the custom action.
Any others ideas on why the method is not called would be welcome.
Regards,
Neville Lang
P.S. I have posted this message on "microsoft.public.platformsdk.msi",
"microsoft.public.windows.msi" and "microsoft.public.windows.msi".
Phil Wilson
2004-08-24 17:18:02 UTC
Permalink
It's usually ok to post the log here in the text of the message, not as an
attachment.
--
Phil Wilson [MVP Windows Installer]
----
Post by Neville Lang
Phil,
Thank you for your reply.
I created a log file as you suggested. I guess my next problem is that is
cannot completely follow all of the entries in the log file. Is there a
source on the internet that might make reading a log file more clear? In
particular, should it tell me when the Custom Action is called?
This is the first time I have had to delve into the .MSI file and so I am
relatively new to the depths of Windows Installer though I have been using
it for over a year. This is the first problem I have had to follow up.
As background, my MSI file is auto. created by Visual Studio .NET 2003 when
I build my .NET solution. I also have ORCA but I am still unable to work out
exactly what I am seeing.
BTW, I have just ordered your book from Amazon.com so that I hope to get my
head around the Window Installer a bit more.
Regards,
Neville Lang
Post by Phil Wilson
The MsiZap utility is intended for removal of products installed with MSI
that can't be uninstalled for some reason. That's not the same as your
uninstall custom action not being called, because that means that the
product is uninstalled in the MSI sense, but that your CA wasn't called so
msiexec /x {your product code guid} /l*v somelogfile.log
and there may be some clues as to what's happening.
--
Phil Wilson [MVP Windows Installer]
----
Post by Neville Lang
Hi all,
I have VS .NET 2003 and have created a solution that installs part of my
app
Post by Neville Lang
onto a desktop and the main part onto a Pocket PC. Both parts of this
app
Post by Phil Wilson
Post by Neville Lang
interwork with each other when the Pocket PC is sitting in the cradle.
For installation, I use Windows Installer and use the custom action
feature
Post by Neville Lang
to provide custom code for installing both the desktop part and the
Pocket
Post by Phil Wilson
Post by Neville Lang
PC part (using RAPI). I also use the custom action feature to provide
code
Post by Phil Wilson
Post by Neville Lang
for removing the various parts of the program on the Pocket PC as well
as
Post by Phil Wilson
Post by Neville Lang
the desktop. This approach enables a complete removal of all files,
folders
Post by Neville Lang
and registry entries on both platforms.
For over a year, debugging both my custom install and removal methods
has
Post by Phil Wilson
Post by Neville Lang
worked well. Now, for some reason, I am unable to debug the removal
method
Post by Phil Wilson
Post by Neville Lang
called by the Uninstaller using VS .NET 2003. Previously, I did this by
using the debug version of my CustomInstaller.dll in the .MSI (Build
Solution in VS .NET). I use a MessageBox.Show() in my method so when the
uninstaller calls my method, processing is halted due to the MessageBox
enabling me to attach the debugger to the Process, set a breakpoint and
then
Post by Neville Lang
continue to step past the MessageBox now using the debugger.
What I have now found is that my removal method is now not called by the
Uninstaller. I searched for something like this on Google and there were
several items with somewhat similar symptoms although I do not think
they
Post by Phil Wilson
Post by Neville Lang
were for .NET. On one post, Phil Wilson indicated that you could run the
MSIZAP program. I followed his advice by running Windows Install Clean
Up
Post by Phil Wilson
Post by Neville Lang
(which uses MSIZAP) after the app is installed. This action, I thought,
may
Post by Neville Lang
remove any install and/or version entries hidden away. However, after a
fresh installation, the uninstaller still did not call my .NET method
for
Post by Phil Wilson
Post by Neville Lang
the custom action.
Any others ideas on why the method is not called would be welcome.
Regards,
Neville Lang
P.S. I have posted this message on "microsoft.public.platformsdk.msi",
"microsoft.public.windows.msi" and "microsoft.public.windows.msi".
Neville Lang
2004-08-25 06:49:14 UTC
Permalink
Phil,

Please find below, the output log after running the msiexec /x {....} /l*v
xxx.log. I am sure your experienced eyes will pick something up quickly.

All I am trying to do at the moment is to find our why my CustomAction:

public override void Uninstall(IDictionary savedState)
{
MessageBox.Show("Do you want to proceed (UnInstaller)?");
...
...
}

is not being called. Hopefully, the output will show up something.

For your information, a similar override for the Installer IS called OK
because the associated MessageBox() pops up, but not for the Uninstaller.

Regards,
Neville Lang

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

=== Verbose logging started: 25/08/2004 16:21:57 Build type: SHIP UNICODE
2.00.2600.1106 Calling process: C:\WINDOWS\System32\MsiExec.exe ===
MSI (c) (24:48): Resetting cached policy values
MSI (c) (24:48): Machine policy value 'Debug' is 0
MSI (c) (24:48): ******* RunEngine:
******* Product: {E7CD50D2-C004-4A6D-BB30-4E54517A6579}
******* Action:
******* CommandLine: **********
MSI (c) (24:48): Client-side and UI is none or basic: Running entire install
on the server.
MSI (c) (24:48): Grabbed execution mutex.
MSI (c) (24:48): Cloaking enabled.
MSI (c) (24:48): Incrementing counter to disable shutdown. Counter after
increment: 0
MSI (s) (A4:8C): Resetting cached policy values
MSI (s) (A4:8C): Machine policy value 'Debug' is 0
MSI (s) (A4:8C): ******* RunEngine:
******* Product: {E7CD50D2-C004-4A6D-BB30-4E54517A6579}
******* Action:
******* CommandLine: **********
MSI (s) (A4:8C): Machine policy value 'DisableUserInstalls' is 0
MSI (s) (A4:8C): Setting cached product context: User non-assigned for
product: 2D05DC7E400CD6A4BB03E44515A75697
MSI (s) (A4:8C): Using cached product context: User non-assigned for
product: 2D05DC7E400CD6A4BB03E44515A75697
MSI (s) (A4:8C): Using cached product context: User non-assigned for
product: 2D05DC7E400CD6A4BB03E44515A75697
MSI (s) (A4:8C): Using cached product context: User non-assigned for
product: 2D05DC7E400CD6A4BB03E44515A75697
*** Log Line Missing ***
MSI (s) (A4:8C): Using cached product context: User non-assigned for
product: 2D05DC7E400CD6A4BB03E44515A75697
MSI (s) (A4:8C): Using cached product context: User non-assigned for
product: 2D05DC7E400CD6A4BB03E44515A75697
MSI (s) (A4:8C): Using cached product context: User non-assigned for
product: 2D05DC7E400CD6A4BB03E44515A75697
MSI (s) (A4:8C): End dialog not enabled
MSI (s) (A4:8C): Original package ==> C:\WINDOWS\Installer\1753705.msi
MSI (s) (A4:8C): Package we're running from ==>
C:\WINDOWS\Installer\1753705.msi
MSI (s) (A4:8C): Using cached product context: User non-assigned for
product: 2D05DC7E400CD6A4BB03E44515A75697
MSI (s) (A4:8C): Using cached product context: User non-assigned for
product: 2D05DC7E400CD6A4BB03E44515A75697
MSI (s) (A4:8C): APPCOMPAT: looking for appcompat database entry with
ProductCode '{E7CD50D2-C004-4A6D-BB30-4E54517A6579}'.
MSI (s) (A4:8C): APPCOMPAT: no matching ProductCode found in database.
MSI (s) (A4:8C): Using cached product context: User non-assigned for
product: 2D05DC7E400CD6A4BB03E44515A75697
MSI (s) (A4:8C): Using cached product context: User non-assigned for
product: 2D05DC7E400CD6A4BB03E44515A75697
MSI (s) (A4:8C): Using cached product context: User non-assigned for
product: 2D05DC7E400CD6A4BB03E44515A75697
MSI (s) (A4:8C): Using cached product context: User non-assigned for
product: 2D05DC7E400CD6A4BB03E44515A75697
MSI (s) (A4:8C): APPCOMPAT: looking for appcompat database entry with
ProductCode '{E7CD50D2-C004-4A6D-BB30-4E54517A6579}'.
MSI (s) (A4:8C): APPCOMPAT: no matching ProductCode found in database.
MSI (s) (A4:8C): Transforms are not secure.
MSI (s) (A4:8C): Command Line: REMOVE=ALL CURRENTDIRECTORY=C:\Documents and
Settings\Neville Lang CLIENTUILEVEL=2 CLIENTPROCESSID=3620
MSI (s) (A4:8C): Product Code passed to Engine.Initialize:
'{E7CD50D2-C004-4A6D-BB30-4E54517A6579}'
MSI (s) (A4:8C): Product Code from property table before transforms:
'{E7CD50D2-C004-4A6D-BB30-4E54517A6579}'
MSI (s) (A4:8C): Product Code from property table after transforms:
'{E7CD50D2-C004-4A6D-BB30-4E54517A6579}'
MSI (s) (A4:8C): Product registered: entering maintenance mode
MSI (s) (A4:8C): Using cached product context: User non-assigned for
product: 2D05DC7E400CD6A4BB03E44515A75697
MSI (s) (A4:8C): Using cached product context: User non-assigned for
product: 2D05DC7E400CD6A4BB03E44515A75697
MSI (s) (A4:8C): Using cached product context: User non-assigned for
product: 2D05DC7E400CD6A4BB03E44515A75697
MSI (s) (A4:8C): Using cached product context: User non-assigned for
product: 2D05DC7E400CD6A4BB03E44515A75697
MSI (s) (A4:8C): Package name retrieved from configuration data: 'MyApp.msi'
MSI (s) (A4:8C): Using cached product context: User non-assigned for
product: 2D05DC7E400CD6A4BB03E44515A75697
MSI (s) (A4:8C): Determined that existing product (either this product or
the product being upgraded with a patch) is installed per-user.
MSI (s) (A4:8C): Note: 1: 2262 2: Error 3: -2147287038
MSI (s) (A4:8C): Note: 1: 2729
MSI (s) (A4:8C): Note: 1: 2729
MSI (s) (A4:8C): Note: 1: 2729
MSI (s) (A4:8C): Note: 1: 2729
MSI (s) (A4:8C): Note: 1: 2729
MSI (s) (A4:8C): Note: 1: 2729
MSI (s) (A4:8C): Note: 1: 2729
MSI (s) (A4:8C): Note: 1: 2729
MSI (s) (A4:8C): Note: 1: 2729
MSI (s) (A4:8C): Note: 1: 2729
MSI (s) (A4:8C): Note: 1: 2729
MSI (s) (A4:8C): Note: 1: 2729
MSI (s) (A4:8C): Note: 1: 2729
MSI (s) (A4:8C): Note: 1: 2729
MSI (s) (A4:8C): Note: 1: 2729
MSI (s) (A4:8C): Note: 1: 2729
MSI (s) (A4:8C): Note: 1: 2262 2: AdminProperties 3: -2147287038
MSI (s) (A4:8C): Machine policy value 'DisableMsi' is 0
MSI (s) (A4:8C): Machine policy value 'AlwaysInstallElevated' is 0
MSI (s) (A4:8C): User policy value 'AlwaysInstallElevated' is 0
MSI (s) (A4:8C): Using cached product context: User non-assigned for
product: 2D05DC7E400CD6A4BB03E44515A75697
MSI (s) (A4:8C): Product {E7CD50D2-C004-4A6D-BB30-4E54517A6579} is not
managed.
MSI (s) (A4:8C): Running product '{E7CD50D2-C004-4A6D-BB30-4E54517A6579}'
with user privileges: It's not assigned.
MSI (s) (A4:8C): TRANSFORMS property is now:
MSI (s) (A4:8C): SHELL32::SHGetFolderPath returned: C:\Documents and
Settings\Neville Lang\Application Data
MSI (s) (A4:8C): SHELL32::SHGetFolderPath returned: C:\Documents and
Settings\Neville Lang\Favorites
MSI (s) (A4:8C): SHELL32::SHGetFolderPath returned: C:\Documents and
Settings\Neville Lang\NetHood
MSI (s) (A4:8C): SHELL32::SHGetFolderPath returned: C:\Documents and
Settings\Neville Lang\My Documents
MSI (s) (A4:8C): SHELL32::SHGetFolderPath returned: C:\Documents and
Settings\Neville Lang\PrintHood
MSI (s) (A4:8C): SHELL32::SHGetFolderPath returned: C:\Documents and
Settings\Neville Lang\Recent
MSI (s) (A4:8C): SHELL32::SHGetFolderPath returned: C:\Documents and
Settings\Neville Lang\SendTo
MSI (s) (A4:8C): SHELL32::SHGetFolderPath returned: C:\Documents and
Settings\Neville Lang\Templates
MSI (s) (A4:8C): SHELL32::SHGetFolderPath returned: C:\Documents and
Settings\All Users\Application Data
MSI (s) (A4:8C): SHELL32::SHGetFolderPath returned: C:\Documents and
Settings\Neville Lang\Local Settings\Application Data
MSI (s) (A4:8C): SHELL32::SHGetFolderPath returned: C:\Documents and
Settings\Neville Lang\My Documents\My Pictures
MSI (s) (A4:8C): SHELL32::SHGetFolderPath returned: C:\Documents and
Settings\Neville Lang\Start Menu\Programs\Administrative Tools
MSI (s) (A4:8C): SHELL32::SHGetFolderPath returned: C:\Documents and
Settings\Neville Lang\Start Menu\Programs\Startup
MSI (s) (A4:8C): SHELL32::SHGetFolderPath returned: C:\Documents and
Settings\Neville Lang\Start Menu\Programs
MSI (s) (A4:8C): SHELL32::SHGetFolderPath returned: C:\Documents and
Settings\Neville Lang\Start Menu
MSI (s) (A4:8C): SHELL32::SHGetFolderPath returned: C:\Documents and
Settings\Neville Lang\Desktop
MSI (s) (A4:8C): SHELL32::SHGetFolderPath returned: C:\Documents and
Settings\All Users\Start Menu\Programs\Administrative Tools
MSI (s) (A4:8C): SHELL32::SHGetFolderPath returned: C:\Documents and
Settings\All Users\Start Menu\Programs\Startup
MSI (s) (A4:8C): SHELL32::SHGetFolderPath returned: C:\Documents and
Settings\All Users\Start Menu\Programs
MSI (s) (A4:8C): SHELL32::SHGetFolderPath returned: C:\Documents and
Settings\All Users\Start Menu
MSI (s) (A4:8C): SHELL32::SHGetFolderPath returned: C:\Documents and
Settings\All Users\Desktop
MSI (s) (A4:8C): SHELL32::SHGetFolderPath returned: C:\WINDOWS\Fonts
MSI (s) (A4:8C): Note: 1: 2898 2: MS Sans Serif 3: MS Sans Serif 4: 0 5: 16
MSI (s) (A4:8C): MSCOREE not loaded loading copy from system32
MSI (s) (A4:8C): Using cached product context: User non-assigned for
product: 2D05DC7E400CD6A4BB03E44515A75697
=== Logging started: 25/08/2004 16:21:58 ===
MSI (s) (A4:8C): Machine policy value 'DisableRollback' is 0
MSI (s) (A4:8C): User policy value 'DisableRollback' is 0
MSI (s) (A4:8C): Doing action: INSTALL
MSI (s) (A4:8C): Note: 1: 2262 2: ActionText 3: -2147287038
Action start 16:21:58: INSTALL.
MSI (s) (A4:8C): Running ExecuteSequence
MSI (s) (A4:8C): Doing action: DIRCA_CheckFX
Action start 16:21:58: DIRCA_CheckFX.
MSI (s) (A4:8C): Creating MSIHANDLE (12) of type 790542 for thread 140
Action ended 16:21:59: DIRCA_CheckFX. Return value 1.
MSI (s) (A4:8C): Doing action: AppSearch
Action start 16:21:59: AppSearch.
MSI (s) (A4:8C): Note: 1: 2262 2: AppSearch 3: -2147287038
Action ended 16:21:59: AppSearch. Return value 1.
MSI (s) (A4:8C): Doing action: FindRelatedProducts
Action start 16:21:59: FindRelatedProducts.
MSI (s) (A4:8C): Skipping FindRelatedProducts action: not run in maintenance
mode
Action ended 16:21:59: FindRelatedProducts. Return value 0.
MSI (s) (A4:8C): Skipping action: ERRCA_CANCELNEWERVERSION (condition is
false)
MSI (s) (A4:8C): Skipping action: VSDCA_VsdLaunchConditions (condition is
false)
MSI (s) (A4:8C): Skipping action: LaunchConditions (condition is false)
MSI (s) (A4:8C): Skipping action: CCPSearch (condition is false)
MSI (s) (A4:8C): Skipping action: RMCCPSearch (condition is false)
MSI (s) (A4:8C): Doing action: ValidateProductID
Action start 16:21:59: ValidateProductID.
Action ended 16:21:59: ValidateProductID. Return value 1.
MSI (s) (A4:8C): Doing action: DIRCA_TARGETDIR
Action start 16:21:59: DIRCA_TARGETDIR.
Action ended 16:21:59: DIRCA_TARGETDIR. Return value 1.
MSI (s) (A4:8C): Doing action: CostInitialize
Action start 16:21:59: CostInitialize.
MSI (s) (A4:8C): Using cached product context: User non-assigned for
product: 2D05DC7E400CD6A4BB03E44515A75697
Action ended 16:21:59: CostInitialize. Return value 1.
MSI (s) (A4:8C): Doing action: FileCost
Action start 16:21:59: FileCost.
MSI (s) (A4:8C): Note: 1: 2262 2: RemoveFile 3: -2147287038
MSI (s) (A4:8C): Note: 1: 2262 2: Registry 3: -2147287038
MSI (s) (A4:8C): Note: 1: 2262 2: Class 3: -2147287038
MSI (s) (A4:8C): Note: 1: 2262 2: Extension 3: -2147287038
MSI (s) (A4:8C): Note: 1: 2262 2: TypeLib 3: -2147287038
MSI (s) (A4:8C): Note: 1: 2262 2: IniFile 3: -2147287038
MSI (s) (A4:8C): Note: 1: 2262 2: MoveFile 3: -2147287038
MSI (s) (A4:8C): Note: 1: 2262 2: DuplicateFile 3: -2147287038
MSI (s) (A4:8C): Note: 1: 2262 2: ReserveCost 3: -2147287038
MSI (s) (A4:8C): Note: 1: 2262 2: Shortcut 3: -2147287038
Action ended 16:21:59: FileCost. Return value 1.
MSI (s) (A4:8C): Doing action: IsolateComponents
Action start 16:21:59: IsolateComponents.
MSI (s) (A4:8C): Note: 1: 2262 2: IsolatedComponent 3: -2147287038
MSI (s) (A4:8C): Note: 1: 2262 2: BindImage 3: -2147287038
MSI (s) (A4:8C): Note: 1: 2262 2: Patch 3: -2147287038
Action ended 16:21:59: IsolateComponents. Return value 1.
MSI (s) (A4:8C): Doing action: CostFinalize
Action start 16:21:59: CostFinalize.
MSI (s) (A4:8C): Note: 1: 2262 2: Patch 3: -2147287038
MSI (s) (A4:8C): Note: 1: 2262 2: Condition 3: -2147287038
MSI (s) (A4:8C): Using cached product context: User non-assigned for
product: 2D05DC7E400CD6A4BB03E44515A75697
MSI (s) (A4:8C): Using cached product context: User non-assigned for
product: 2D05DC7E400CD6A4BB03E44515A75697
MSI (s) (A4:8C): Using cached product context: User non-assigned for
product: 2D05DC7E400CD6A4BB03E44515A75697
MSI (s) (A4:8C): Target path resolution complete. Dumping Directory table...
MSI (s) (A4:8C): Note: target paths subject to change (via custom actions or
browsing)
MSI (s) (A4:8C): Dir (target): Key: TARGETDIR , Object: C:\Program
Files\Neville J. Lang & Assoc. Pty. Ltd\MyApp\
MSI (s) (A4:8C): Dir (target): Key: DesktopFolder , Object: C:\Documents and
Settings\Neville Lang\Desktop\
MSI (s) (A4:8C): Dir (target): Key: ProgramMenuFolder , Object: C:\Documents
and Settings\Neville Lang\Start Menu\Programs\
Action ended 16:21:59: CostFinalize. Return value 1.
MSI (s) (A4:8C): Skipping action: SetODBCFolders (condition is false)
MSI (s) (A4:8C): Doing action: InstallValidate
Action start 16:21:59: InstallValidate.
MSI (s) (A4:8C): Feature: DefaultFeature; Installed: Local; Request:
Absent; Action: Absent
MSI (s) (A4:8C): Component: C__68B0CE3FA3BF45B292AD23948D810103; Installed:
Local; Request: Absent; Action: FileAbsent
MSI (s) (A4:8C): Component: C__8448ABC12DAA4A55A2E936D3E24251E7; Installed:
Local; Request: Absent; Action: Absent
MSI (s) (A4:8C): Component: C__C132B15B96AD448FAF52EE9CF6D31C12; Installed:
Local; Request: Absent; Action: Absent
MSI (s) (A4:8C): Component: C__D93A0E7B6A3041BA8BD10283B30C6181; Installed:
Local; Request: Absent; Action: Absent
MSI (s) (A4:8C): Component: C__DB08AC82158D49D583A615A3B043C4DA; Installed:
Local; Request: Absent; Action: Absent
MSI (s) (A4:8C): Component: C__FA3BD5CDBF744653BD2D4A880211B49C; Installed:
Local; Request: Absent; Action: Absent
MSI (s) (A4:8C): Note: 1: 2262 2: BindImage 3: -2147287038
MSI (s) (A4:8C): Note: 1: 2262 2: ProgId 3: -2147287038
MSI (s) (A4:8C): Note: 1: 2262 2: PublishComponent 3: -2147287038
MSI (s) (A4:8C): Note: 1: 2262 2: SelfReg 3: -2147287038
MSI (s) (A4:8C): Note: 1: 2262 2: Extension 3: -2147287038
MSI (s) (A4:8C): Note: 1: 2262 2: Font 3: -2147287038
MSI (s) (A4:8C): Note: 1: 2262 2: Shortcut 3: -2147287038
MSI (s) (A4:8C): Note: 1: 2262 2: Class 3: -2147287038
MSI (s) (A4:8C): Note: 1: 2262 2: RemoveFile 3: -2147287038
MSI (s) (A4:8C): Note: 1: 2205 2: 3: _RemoveFilePath
MSI (s) (A4:8C): Note: 1: 2262 2: MsiFileHash 3: -2147287038
MSI (s) (A4:8C): Note: 1: 2262 2: DuplicateFile 3: -2147287038
MSI (s) (A4:8C): Note: 1: 2262 2: ReserveCost 3: -2147287038
MSI (s) (A4:8C): Note: 1: 2262 2: MoveFile 3: -2147287038
MSI (s) (A4:8C): Note: 1: 2262 2: RemoveFile 3: -2147287038
MSI (s) (A4:8C): Note: 1: 2262 2: Shortcut 3: -2147287038
MSI (s) (A4:8C): Note: 1: 2262 2: BindImage 3: -2147287038
MSI (s) (A4:8C): Note: 1: 2262 2: ProgId 3: -2147287038
MSI (s) (A4:8C): Note: 1: 2262 2: PublishComponent 3: -2147287038
MSI (s) (A4:8C): Note: 1: 2262 2: SelfReg 3: -2147287038
MSI (s) (A4:8C): Note: 1: 2262 2: Extension 3: -2147287038
MSI (s) (A4:8C): Note: 1: 2262 2: Font 3: -2147287038
MSI (s) (A4:8C): Note: 1: 2262 2: Class 3: -2147287038
MSI (s) (A4:8C): Note: 1: 2727 2:
MSI (s) (A4:8C): Note: 1: 2727 2:
Action ended 16:22:00: InstallValidate. Return value 1.
MSI (s) (A4:8C): Doing action: InstallInitialize
Action start 16:22:00: InstallInitialize.
MSI (s) (A4:8C): Machine policy value 'AlwaysInstallElevated' is 0
MSI (s) (A4:8C): User policy value 'AlwaysInstallElevated' is 0
MSI (s) (A4:8C): BeginTransaction: Locking Server
MSI (s) (A4:8C): Machine policy value 'LimitSystemRestoreCheckpointing' is 0
MSI (s) (A4:8C): Note: 1: 1717 2: MyApp
MSI (s) (A4:8C): Note: 1: 2262 2: Error 3: -2147287038
MSI (s) (A4:8C): Calling SRSetRestorePoint API. dwRestorePtType: 1,
dwEventType: 102, llSequenceNumber: 0, szDescription: "Removed MyApp".
MSI (s) (A4:8C): The call to SRSetRestorePoint API succeeded. Returned
status: 0, llSequenceNumber: 919.
MSI (s) (A4:8C): Server not locked: locking for product
{E7CD50D2-C004-4A6D-BB30-4E54517A6579}
MSI (s) (A4:8C): Using cached product context: User non-assigned for
product: 2D05DC7E400CD6A4BB03E44515A75697
Action 16:22:13: GenerateScript. Generating script operations for action:
GenerateScript: InstallInitialize
MSI (s) (A4:8C): Using cached product context: User non-assigned for
product: 2D05DC7E400CD6A4BB03E44515A75697
MSI (s) (A4:8C): Note: 1: 2205 2: 3: #_PatchCache
MSI (s) (A4:8C): Note: 1: 2228 2: 3: #_PatchCache 4: SELECT `PatchId` FROM
`#_PatchCache`
MSI (s) (A4:8C): Note: 1: 2262 2: Icon 3: -2147287038
MSI (s) (A4:8C): Note: 1: 2262 2: Class 3: -2147287038
MSI (s) (A4:8C): Note: 1: 2262 2: Extension 3: -2147287038
MSI (s) (A4:8C): Note: 1: 2262 2: ProgId 3: -2147287038
MSI (s) (A4:8C): Using cached product context: User non-assigned for
product: 2D05DC7E400CD6A4BB03E44515A75697
MSI (s) (A4:8C): Using cached product context: User non-assigned for
product: 2D05DC7E400CD6A4BB03E44515A75697
Action ended 16:22:13: InstallInitialize. Return value 1.
MSI (s) (A4:8C): Doing action: RemoveExistingProducts
Action start 16:22:13: RemoveExistingProducts.
MSI (s) (A4:8C): Skipping RemoveExistingProducts action: current
configuration is maintenance mode or an uninstall
Action ended 16:22:13: RemoveExistingProducts. Return value 0.
MSI (s) (A4:8C): Skipping action: AllocateRegistrySpace (condition is false)
MSI (s) (A4:8C): Doing action: ProcessComponents
Action start 16:22:13: ProcessComponents.
GenerateScript: Updating component registration
Action ended 16:22:14: ProcessComponents. Return value 1.
MSI (s) (A4:8C): Doing action: MsiUnpublishAssemblies
Action start 16:22:14: MsiUnpublishAssemblies.
GenerateScript: Unpublishing assembly information
Action ended 16:22:14: MsiUnpublishAssemblies. Return value 1.
MSI (s) (A4:8C): Skipping action:
_634A9943_325D_4742_A922_ED2F4E0A4A49.uninstall.SetProperty (condition is
false)
MSI (s) (A4:8C): Skipping action:
_634A9943_325D_4742_A922_ED2F4E0A4A49.uninstall (condition is false)
MSI (s) (A4:8C): Doing action: UnpublishComponents
Action start 16:22:14: UnpublishComponents.
MSI (s) (A4:8C): Note: 1: 2262 2: PublishComponent 3: -2147287038
Action ended 16:22:14: UnpublishComponents. Return value 1.
MSI (s) (A4:8C): Doing action: UnpublishFeatures
Action start 16:22:14: UnpublishFeatures.
MSI (s) (A4:8C): Using cached product context: User non-assigned for
product: 2D05DC7E400CD6A4BB03E44515A75697
GenerateScript: Unpublishing Product Features
Action ended 16:22:14: UnpublishFeatures. Return value 1.
MSI (s) (A4:8C): Doing action: StopServices
Action start 16:22:14: StopServices.
MSI (s) (A4:8C): Note: 1: 2262 2: ServiceControl 3: -2147287038
Action ended 16:22:14: StopServices. Return value 1.
MSI (s) (A4:8C): Doing action: DeleteServices
Action start 16:22:14: DeleteServices.
MSI (s) (A4:8C): Note: 1: 2262 2: ServiceControl 3: -2147287038
Action ended 16:22:14: DeleteServices. Return value 1.
MSI (s) (A4:8C): Doing action: UnregisterComPlus
Action start 16:22:14: UnregisterComPlus.
MSI (s) (A4:8C): Note: 1: 2262 2: Complus 3: -2147287038
Action ended 16:22:14: UnregisterComPlus. Return value 1.
MSI (s) (A4:8C): Doing action: SelfUnregModules
Action start 16:22:14: SelfUnregModules.
MSI (s) (A4:8C): Note: 1: 2262 2: SelfReg 3: -2147287038
Action ended 16:22:14: SelfUnregModules. Return value 1.
MSI (s) (A4:8C): Doing action: UnregisterTypeLibraries
Action start 16:22:14: UnregisterTypeLibraries.
MSI (s) (A4:8C): Note: 1: 2262 2: TypeLib 3: -2147287038
Action ended 16:22:14: UnregisterTypeLibraries. Return value 1.
MSI (s) (A4:8C): Doing action: RemoveODBC
Action start 16:22:14: RemoveODBC.
MSI (s) (A4:8C): Note: 1: 2262 2: ODBCDataSource 3: -2147287038
MSI (s) (A4:8C): Note: 1: 2262 2: ODBCDataSource 3: -2147287038
MSI (s) (A4:8C): Note: 1: 2262 2: ODBCTranslator 3: -2147287038
MSI (s) (A4:8C): Note: 1: 2262 2: ODBCTranslator 3: -2147287038
MSI (s) (A4:8C): Note: 1: 2262 2: ODBCDriver 3: -2147287038
MSI (s) (A4:8C): Note: 1: 2262 2: ODBCDriver 3: -2147287038
MSI (s) (A4:8C): Note: 1: 2711 2: ODBCDriverManager
GenerateScript: Removing ODBC components
MSI (s) (A4:8C): Note: 1: 2711 2: ODBCDriverManager64
Action ended 16:22:14: RemoveODBC. Return value 1.
MSI (s) (A4:8C): Doing action: UnregisterFonts
Action start 16:22:14: UnregisterFonts.
MSI (s) (A4:8C): Note: 1: 2262 2: Font 3: -2147287038
Action ended 16:22:14: UnregisterFonts. Return value 1.
MSI (s) (A4:8C): Doing action: RemoveRegistryValues
Action start 16:22:14: RemoveRegistryValues.
MSI (s) (A4:8C): Note: 1: 2262 2: RemoveRegistry 3: -2147287038
Action ended 16:22:14: RemoveRegistryValues. Return value 1.
MSI (s) (A4:8C): Doing action: UnregisterClassInfo
Action start 16:22:14: UnregisterClassInfo.
MSI (s) (A4:8C): Note: 1: 2262 2: Class 3: -2147287038
Action ended 16:22:14: UnregisterClassInfo. Return value 1.
MSI (s) (A4:8C): Doing action: UnregisterExtensionInfo
Action start 16:22:14: UnregisterExtensionInfo.
MSI (s) (A4:8C): Note: 1: 2262 2: Extension 3: -2147287038
Action ended 16:22:14: UnregisterExtensionInfo. Return value 1.
MSI (s) (A4:8C): Doing action: UnregisterProgIdInfo
Action start 16:22:14: UnregisterProgIdInfo.
MSI (s) (A4:8C): Note: 1: 2262 2: ProgId 3: -2147287038
MSI (s) (A4:8C): Note: 1: 2262 2: Class 3: -2147287038
MSI (s) (A4:8C): Note: 1: 2262 2: ProgId 3: -2147287038
MSI (s) (A4:8C): Note: 1: 2262 2: Extension 3: -2147287038
Action ended 16:22:14: UnregisterProgIdInfo. Return value 1.
MSI (s) (A4:8C): Doing action: UnregisterMIMEInfo
Action start 16:22:14: UnregisterMIMEInfo.
MSI (s) (A4:8C): Note: 1: 2262 2: MIME 3: -2147287038
MSI (s) (A4:8C): Note: 1: 2262 2: Extension 3: -2147287038
Action ended 16:22:14: UnregisterMIMEInfo. Return value 1.
MSI (s) (A4:8C): Doing action: RemoveIniValues
Action start 16:22:14: RemoveIniValues.
MSI (s) (A4:8C): Note: 1: 2262 2: IniFile 3: -2147287038
MSI (s) (A4:8C): Note: 1: 2262 2: RemoveIniFile 3: -2147287038
Action ended 16:22:14: RemoveIniValues. Return value 1.
MSI (s) (A4:8C): Doing action: RemoveShortcuts
Action start 16:22:14: RemoveShortcuts.
Action ended 16:22:14: RemoveShortcuts. Return value 1.
MSI (s) (A4:8C): Doing action: RemoveEnvironmentStrings
Action start 16:22:14: RemoveEnvironmentStrings.
MSI (s) (A4:8C): Note: 1: 2262 2: Environment 3: -2147287038
Action ended 16:22:14: RemoveEnvironmentStrings. Return value 1.
MSI (s) (A4:8C): Doing action: RemoveDuplicateFiles
Action start 16:22:14: RemoveDuplicateFiles.
Action ended 16:22:14: RemoveDuplicateFiles. Return value 1.
MSI (s) (A4:8C): Doing action: RemoveFiles
Action start 16:22:14: RemoveFiles.
GenerateScript: Removing files
Action ended 16:22:14: RemoveFiles. Return value 1.
MSI (s) (A4:8C): Doing action: RemoveFolders
Action start 16:22:14: RemoveFolders.
MSI (s) (A4:8C): Note: 1: 2262 2: CreateFolder 3: -2147287038
MSI (s) (A4:8C): Note: 1: 2262 2: LockPermissions 3: -2147287038
Action ended 16:22:14: RemoveFolders. Return value 1.
MSI (s) (A4:8C): Doing action: CreateFolders
Action start 16:22:14: CreateFolders.
MSI (s) (A4:8C): Note: 1: 2262 2: CreateFolder 3: -2147287038
MSI (s) (A4:8C): Note: 1: 2262 2: LockPermissions 3: -2147287038
Action ended 16:22:14: CreateFolders. Return value 1.
MSI (s) (A4:8C): Doing action: MoveFiles
Action start 16:22:14: MoveFiles.
Action ended 16:22:15: MoveFiles. Return value 1.
MSI (s) (A4:8C): Doing action: InstallFiles
Action start 16:22:15: InstallFiles.
MSI (s) (A4:8C): Note: 1: 2262 2: LockPermissions 3: -2147287038
MSI (s) (A4:8C): Note: 1: 2262 2: Patch 3: -2147287038
MSI (s) (A4:8C): Note: 1: 2205 2: 3: MsiPatchOldAssemblyFile
MSI (s) (A4:8C): Note: 1: 2228 2: 3: MsiPatchOldAssemblyFile 4: SELECT
`MsiPatchOldAssemblyFile`.`Assembly_` FROM `MsiPatchOldAssemblyFile` WHERE
`MsiPatchOldAssemblyFile`.`File_` = ?
MSI (s) (A4:8C): Note: 1: 2262 2: Error 3: -2147287038
MSI (s) (A4:8C): Note: 1: 2205 2: 3: MsiSFCBypass
MSI (s) (A4:8C): Note: 1: 2228 2: 3: MsiSFCBypass 4: SELECT `File_` FROM
`MsiSFCBypass` WHERE `File_` = ?
MSI (s) (A4:8C): Note: 1: 2262 2: MsiPatchHeaders 3: -2147287038
GenerateScript: Copying new files
Action ended 16:22:15: InstallFiles. Return value 1.
MSI (s) (A4:8C): Doing action: PatchFiles
Action start 16:22:15: PatchFiles.
MSI (s) (A4:8C): Note: 1: 2262 2: Patch 3: -2147287038
MSI (s) (A4:8C): Note: 1: 2262 2: Error 3: -2147287038
Action ended 16:22:15: PatchFiles. Return value 1.
MSI (s) (A4:8C): Doing action: DuplicateFiles
Action start 16:22:15: DuplicateFiles.
Action ended 16:22:15: DuplicateFiles. Return value 1.
MSI (s) (A4:8C): Doing action: BindImage
Action start 16:22:15: BindImage.
MSI (s) (A4:8C): Note: 1: 2262 2: BindImage 3: -2147287038
Action ended 16:22:15: BindImage. Return value 1.
MSI (s) (A4:8C): Doing action: CreateShortcuts
Action start 16:22:15: CreateShortcuts.
MSI (s) (A4:8C): Using cached product context: User non-assigned for
product: 2D05DC7E400CD6A4BB03E44515A75697
MSI (s) (A4:8C): Using cached product context: User non-assigned for
product: 2D05DC7E400CD6A4BB03E44515A75697
MSI (s) (A4:8C): Using cached product context: User non-assigned for
product: 2D05DC7E400CD6A4BB03E44515A75697
MSI (s) (A4:8C): Using cached product context: User non-assigned for
product: 2D05DC7E400CD6A4BB03E44515A75697
Action ended 16:22:15: CreateShortcuts. Return value 1.
MSI (s) (A4:8C): Doing action: RegisterClassInfo
Action start 16:22:15: RegisterClassInfo.
MSI (s) (A4:8C): Using cached product context: User non-assigned for
product: 2D05DC7E400CD6A4BB03E44515A75697
MSI (s) (A4:8C): Using cached product context: User non-assigned for
product: 2D05DC7E400CD6A4BB03E44515A75697
MSI (s) (A4:8C): Note: 1: 2262 2: Class 3: -2147287038
Action ended 16:22:15: RegisterClassInfo. Return value 1.
MSI (s) (A4:8C): Doing action: RegisterExtensionInfo
Action start 16:22:15: RegisterExtensionInfo.
MSI (s) (A4:8C): Using cached product context: User non-assigned for
product: 2D05DC7E400CD6A4BB03E44515A75697
MSI (s) (A4:8C): Using cached product context: User non-assigned for
product: 2D05DC7E400CD6A4BB03E44515A75697
MSI (s) (A4:8C): Note: 1: 2262 2: Extension 3: -2147287038
Action ended 16:22:15: RegisterExtensionInfo. Return value 1.
MSI (s) (A4:8C): Doing action: RegisterProgIdInfo
Action start 16:22:15: RegisterProgIdInfo.
MSI (s) (A4:8C): Using cached product context: User non-assigned for
product: 2D05DC7E400CD6A4BB03E44515A75697
MSI (s) (A4:8C): Using cached product context: User non-assigned for
product: 2D05DC7E400CD6A4BB03E44515A75697
MSI (s) (A4:8C): Note: 1: 2262 2: ProgId 3: -2147287038
MSI (s) (A4:8C): Note: 1: 2262 2: Class 3: -2147287038
MSI (s) (A4:8C): Using cached product context: User non-assigned for
product: 2D05DC7E400CD6A4BB03E44515A75697
MSI (s) (A4:8C): Using cached product context: User non-assigned for
product: 2D05DC7E400CD6A4BB03E44515A75697
MSI (s) (A4:8C): Note: 1: 2262 2: ProgId 3: -2147287038
MSI (s) (A4:8C): Note: 1: 2262 2: Extension 3: -2147287038
Action ended 16:22:15: RegisterProgIdInfo. Return value 1.
MSI (s) (A4:8C): Doing action: RegisterMIMEInfo
Action start 16:22:15: RegisterMIMEInfo.
MSI (s) (A4:8C): Using cached product context: User non-assigned for
product: 2D05DC7E400CD6A4BB03E44515A75697
MSI (s) (A4:8C): Using cached product context: User non-assigned for
product: 2D05DC7E400CD6A4BB03E44515A75697
MSI (s) (A4:8C): Note: 1: 2262 2: MIME 3: -2147287038
MSI (s) (A4:8C): Note: 1: 2262 2: Extension 3: -2147287038
Action ended 16:22:15: RegisterMIMEInfo. Return value 1.
MSI (s) (A4:8C): Doing action: WriteRegistryValues
Action start 16:22:15: WriteRegistryValues.
Action ended 16:22:15: WriteRegistryValues. Return value 1.
MSI (s) (A4:8C): Doing action: WriteIniValues
Action start 16:22:15: WriteIniValues.
MSI (s) (A4:8C): Note: 1: 2262 2: IniFile 3: -2147287038
Action ended 16:22:15: WriteIniValues. Return value 1.
MSI (s) (A4:8C): Doing action: WriteEnvironmentStrings
Action start 16:22:15: WriteEnvironmentStrings.
MSI (s) (A4:8C): Note: 1: 2262 2: Environment 3: -2147287038
Action ended 16:22:15: WriteEnvironmentStrings. Return value 1.
MSI (s) (A4:8C): Doing action: RegisterFonts
Action start 16:22:15: RegisterFonts.
MSI (s) (A4:8C): Note: 1: 2262 2: Font 3: -2147287038
Action ended 16:22:15: RegisterFonts. Return value 1.
MSI (s) (A4:8C): Doing action: InstallODBC
Action start 16:22:15: InstallODBC.
MSI (s) (A4:8C): Note: 1: 2711 2: ODBCDriverManager
MSI (s) (A4:8C): Note: 1: 2711 2: ODBCDriverManager64
MSI (s) (A4:8C): Note: 1: 2262 2: ODBCDriver 3: -2147287038
MSI (s) (A4:8C): Note: 1: 2262 2: ODBCAttribute 3: -2147287038
MSI (s) (A4:8C): Note: 1: 2262 2: ODBCDriver 3: -2147287038
MSI (s) (A4:8C): Note: 1: 2262 2: ODBCAttribute 3: -2147287038
MSI (s) (A4:8C): Note: 1: 2262 2: ODBCTranslator 3: -2147287038
MSI (s) (A4:8C): Note: 1: 2262 2: ODBCTranslator 3: -2147287038
MSI (s) (A4:8C): Note: 1: 2262 2: ODBCDataSource 3: -2147287038
MSI (s) (A4:8C): Note: 1: 2262 2: ODBCSourceAttribute 3: -2147287038
MSI (s) (A4:8C): Note: 1: 2262 2: ODBCDataSource 3: -2147287038
MSI (s) (A4:8C): Note: 1: 2262 2: ODBCSourceAttribute 3: -2147287038
Action ended 16:22:15: InstallODBC. Return value 0.
MSI (s) (A4:8C): Doing action: RegisterTypeLibraries
Action start 16:22:15: RegisterTypeLibraries.
MSI (s) (A4:8C): Note: 1: 2262 2: TypeLib 3: -2147287038
Action ended 16:22:15: RegisterTypeLibraries. Return value 1.
MSI (s) (A4:8C): Doing action: SelfRegModules
Action start 16:22:15: SelfRegModules.
MSI (s) (A4:8C): Note: 1: 2262 2: SelfReg 3: -2147287038
Action ended 16:22:15: SelfRegModules. Return value 1.
MSI (s) (A4:8C): Doing action: RegisterComPlus
Action start 16:22:15: RegisterComPlus.
MSI (s) (A4:8C): Note: 1: 2262 2: Complus 3: -2147287038
Action ended 16:22:15: RegisterComPlus. Return value 1.
MSI (s) (A4:8C): Doing action: InstallServices
Action start 16:22:15: InstallServices.
MSI (s) (A4:8C): Note: 1: 2262 2: ServiceInstall 3: -2147287038
Action ended 16:22:15: InstallServices. Return value 1.
MSI (s) (A4:8C): Doing action: StartServices
Action start 16:22:15: StartServices.
MSI (s) (A4:8C): Note: 1: 2262 2: ServiceControl 3: -2147287038
Action ended 16:22:15: StartServices. Return value 1.
MSI (s) (A4:8C): Skipping action:
_B1A5BABB_E9E4_432F_95FA_9C5CABDA1456.install.SetProperty (condition is
false)
MSI (s) (A4:8C): Skipping action:
_B1A5BABB_E9E4_432F_95FA_9C5CABDA1456.install (condition is false)
MSI (s) (A4:8C): Doing action: RegisterUser
Action start 16:22:15: RegisterUser.
Action ended 16:22:15: RegisterUser. Return value 0.
MSI (s) (A4:8C): Doing action: RegisterProduct
Action start 16:22:15: RegisterProduct.
Action ended 16:22:15: RegisterProduct. Return value 1.
MSI (s) (A4:8C): Doing action: PublishComponents
Action start 16:22:15: PublishComponents.
MSI (s) (A4:8C): Note: 1: 2262 2: PublishComponent 3: -2147287038
Action ended 16:22:15: PublishComponents. Return value 1.
MSI (s) (A4:8C): Doing action: MsiPublishAssemblies
Action start 16:22:15: MsiPublishAssemblies.
Action ended 16:22:15: MsiPublishAssemblies. Return value 1.
MSI (s) (A4:8C): Doing action: PublishFeatures
Action start 16:22:15: PublishFeatures.
Action ended 16:22:15: PublishFeatures. Return value 1.
MSI (s) (A4:8C): Doing action: PublishProduct
Action start 16:22:15: PublishProduct.
MSI (s) (A4:8C): Using cached product context: User non-assigned for
product: 2D05DC7E400CD6A4BB03E44515A75697
MSI (s) (A4:8C): Using cached product context: User non-assigned for
product: 2D05DC7E400CD6A4BB03E44515A75697
MSI (s) (A4:8C): Using cached product context: User non-assigned for
product: 2D05DC7E400CD6A4BB03E44515A75697
Action ended 16:22:15: PublishProduct. Return value 1.
MSI (s) (A4:8C): Doing action: InstallFinalize
Action start 16:22:15: InstallFinalize.
MSI (s) (A4:8C): Running Script: C:\WINDOWS\Installer\MSI137.tmp
MSI (s) (A4:8C): Machine policy value 'DisableRollback' is 0
MSI (s) (A4:8C): Note: 1: 1402 2:
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Installer\Rollb
ack\Scripts 3: 2
MSI (s) (A4:8C): Executing op:
Header(Signature=1397708873,Version=200,Timestamp=823755463,LangId=1033,Plat
form=0,ScriptType=1,ScriptMajorVersion=21,ScriptMinorVersion=4,ScriptAttribu
tes=0)
MSI (s) (A4:8C): Executing op:
ProductInfo(ProductKey={E7CD50D2-C004-4A6D-BB30-4E54517A6579},ProductName=My
App,PackageName=MyApp.msi,Language=1033,Version=16908288,Assignment=0,Obsole
teArg=0,,,PackageCode={8F534CEC-DB03-45B3-8412-454AB2
66CFB9},,,InstanceType=0)
MSI (s) (A4:8C): SHELL32::SHGetFolderPath returned: C:\Documents and
Settings\Neville Lang\Application Data
MSI (s) (A4:8C): Executing op: DialogInfo(Type=0,Argument=1033)
MSI (s) (A4:8C): Executing op: DialogInfo(Type=1,Argument=MyApp)
MSI (s) (A4:8C): Executing op:
RollbackInfo(,RollbackAction=Rollback,RollbackDescription=Rolling back
action:,RollbackTemplate=,CleanupAction=RollbackCleanup,CleanupDescription=R
emoving backup files,CleanupTemplate=File: )
MSI (s) (A4:8C): Executing op: ActionStart(Name=InstallInitialize,,)
Action 16:22:15: InstallInitialize.
MSI (s) (A4:8C): Executing op:
ProductUnregister(UpgradeCode={E1C27455-C2A6-4723-A4B1-642F294A8A11})
1: {E7CD50D2-C004-4A6D-BB30-4E54517A6579}
MSI (s) (A4:8C): Note: 1: 1402 2:
UNKNOWN\Products\2D05DC7E400CD6A4BB03E44515A75697\Transforms 3: 2
MSI (s) (A4:8C): Note: 1: 1402 2:
UNKNOWN\Products\2D05DC7E400CD6A4BB03E44515A75697\Transforms 3: 2
MSI (s) (A4:8C): Scheduling file 'C:\WINDOWS\Installer\1753705.msi' for
deletion during post-install cleanup (not post-reboot).
MSI (s) (A4:8C): Note: 1: 1402 2:
UNKNOWN\Products\2D05DC7E400CD6A4BB03E44515A75697\Usage 3: 2
MSI (s) (A4:8C): Executing op: ProductCPDisplayInfoUnregister()
MSI (s) (A4:8C): Executing op:
ProductUnpublish(PackageKey={8F534CEC-DB03-45B3-8412-454AB266CFB9})
1: {E7CD50D2-C004-4A6D-BB30-4E54517A6579}
MSI (s) (A4:8C): Using cached product context: User non-assigned for
product: 2D05DC7E400CD6A4BB03E44515A75697
MSI (s) (A4:8C): Executing op:
UpgradeCodeUnpublish(UpgradeCode={E1C27455-C2A6-4723-A4B1-642F294A8A11})
MSI (s) (A4:8C): Executing op: ProductUnpublishClient(,,)
MSI (s) (A4:8C): Note: 1: 1402 2:
UNKNOWN\Installer\Products\2D05DC7E400CD6A4BB03E44515A75697 3: 2
MSI (s) (A4:8C): Executing op: SourceListUnpublish(,)
MSI (s) (A4:8C): Note: 1: 1402 2:
UNKNOWN\Installer\Products\2D05DC7E400CD6A4BB03E44515A75697\SourceList 3: 2
MSI (s) (A4:8C): Executing op:
ActionStart(Name=ProcessComponents,Description=Updating component
registration,)
Action 16:22:16: ProcessComponents. Updating component registration
MSI (s) (A4:8C): Executing op:
ProgressTotal(Total=6,Type=1,ByteEquivalent=24000)
MSI (s) (A4:8C): Executing op:
ComponentUnregister(ComponentId={744A65BA-5892-931D-2B24-9A72004BAEFF},,Bina
ryType=0,)
1: {E7CD50D2-C004-4A6D-BB30-4E54517A6579} 2:
{744A65BA-5892-931D-2B24-9A72004BAEFF}
MSI (s) (A4:8C): Executing op:
ComponentUnregister(ComponentId={56F708D7-CE82-F0E7-6F2A-165474305224},,Bina
ryType=0,)
1: {E7CD50D2-C004-4A6D-BB30-4E54517A6579} 2:
{56F708D7-CE82-F0E7-6F2A-165474305224}
MSI (s) (A4:8C): Executing op:
ComponentUnregister(ComponentId={14350085-D258-C660-CDFB-DB52B151F32A},,Bina
ryType=0,)
1: {E7CD50D2-C004-4A6D-BB30-4E54517A6579} 2:
{14350085-D258-C660-CDFB-DB52B151F32A}
MSI (s) (A4:8C): Executing op:
ComponentUnregister(ComponentId={71A0C18A-DEEC-50FD-0F81-55204A5871AF},,Bina
ryType=0,)
1: {E7CD50D2-C004-4A6D-BB30-4E54517A6579} 2:
{71A0C18A-DEEC-50FD-0F81-55204A5871AF}
MSI (s) (A4:8C): Executing op:
ComponentUnregister(ComponentId={17920A28-5BA9-FE69-FE1D-B9D3C204CDF0},,Bina
ryType=0,)
1: {E7CD50D2-C004-4A6D-BB30-4E54517A6579} 2:
{17920A28-5BA9-FE69-FE1D-B9D3C204CDF0}
MSI (s) (A4:8C): Executing op:
ComponentUnregister(ComponentId={75C418F2-7BA8-1FF5-33D8-B0D445B9663A},,Bina
ryType=0,)
1: {E7CD50D2-C004-4A6D-BB30-4E54517A6579} 2:
{75C418F2-7BA8-1FF5-33D8-B0D445B9663A}
MSI (s) (A4:8C): Executing op:
ActionStart(Name=MsiUnpublishAssemblies,Description=Unpublishing assembly
information,Template=Application Context:, Assembly Name:)
Action 16:22:16: MsiUnpublishAssemblies. Unpublishing assembly information
MSI (s) (A4:8C): Executing op:
AssemblyUnpublish(Feature=DefaultFeature,Component={744A65BA-5892-931D-2B24-
9A72004BAEFF}
MsiUnpublishAssemblies: Application Context:C:|Program Files|Neville J. Lang
& Assoc. Pty. Ltd|MyApp|CustomInstaller.dll, Assembly
Name:CustomInstaller,Version="1.2.0.0",Culture="neutral"
MSI (s) (A4:8C): Note: 1: 1402 2: UNKNOWN\Installer\Assemblies\C:|Program
Files|Neville J. Lang & Assoc. Pty. Ltd|MyApp|CustomInstaller.dll 3: 2
MSI (s) (A4:8C): Note: 1: 1402 2: UNKNOWN\Installer\Assemblies\C:|Program
Files|Neville J. Lang & Assoc. Pty. Ltd|MyApp|CustomInstaller.dll 3: 2
MSI (s) (A4:8C): Executing op:
AssemblyUnpublish(Feature=DefaultFeature,Component={56F708D7-CE82-F0E7-6F2A-
165474305224}
MsiUnpublishAssemblies: Application Context:C:|Program Files|Neville J. Lang
& Assoc. Pty. Ltd|MyApp|MyApp2AB.exe, Assembly
Name:MyApp2AB,Version="1.2.0.0",Culture="neutral"
MSI (s) (A4:8C): Note: 1: 1402 2: UNKNOWN\Installer\Assemblies\C:|Program
Files|Neville J. Lang & Assoc. Pty. Ltd|MyApp|MyApp2AB.exe 3: 2
MSI (s) (A4:8C): Note: 1: 1402 2: UNKNOWN\Installer\Assemblies\C:|Program
Files|Neville J. Lang & Assoc. Pty. Ltd|MyApp|MyApp2AB.exe 3: 2
MSI (s) (A4:8C): Executing op:
AssemblyUnpublish(Feature=DefaultFeature,Component={17920A28-5BA9-FE69-FE1D-
B9D3C204CDF0}
MsiUnpublishAssemblies: Application Context:C:|Program Files|Neville J. Lang
& Assoc. Pty. Ltd|MyApp|AB2MyApp.exe, Assembly
Name:AB2MyApp,Version="1.2.0.0",Culture="neutral"
MSI (s) (A4:8C): Note: 1: 1402 2: UNKNOWN\Installer\Assemblies\C:|Program
Files|Neville J. Lang & Assoc. Pty. Ltd|MyApp|AB2MyApp.exe 3: 2
MSI (s) (A4:8C): Note: 1: 1402 2: UNKNOWN\Installer\Assemblies\C:|Program
Files|Neville J. Lang & Assoc. Pty. Ltd|MyApp|AB2MyApp.exe 3: 2
MSI (s) (A4:8C): Executing op:
ActionStart(Name=UnpublishFeatures,Description=Unpublishing Product
Features,Template=Feature: )
Action 16:22:16: UnpublishFeatures. Unpublishing Product Features
MSI (s) (A4:8C): Executing op:
FeatureUnpublish(Feature=DefaultFeature,,Absent=2,Component=].xGMoj!@W*=moLx
~v2{VukyCR+?Lv'{0%CCD9b.Lt%R){7Pihv+^^BIUFm1,14TLB?[%B)}CI-AbuHaY-wX*@[8jz~S
&'mX,KIvn08qMb~)?-eYPFmswNj6)
UnpublishFeatures: Feature: DefaultFeature
MSI (s) (A4:8C): Note: 1: 1402 2:
UNKNOWN\Installer\Features\2D05DC7E400CD6A4BB03E44515A75697 3: 2
MSI (s) (A4:8C): Executing op:
ActionStart(Name=RemoveODBC,Description=Removing ODBC components,)
Action 16:22:16: RemoveODBC. Removing ODBC components
MSI (s) (A4:8C): Executing op: ODBCDriverManager(,BinaryType=0)
MSI (s) (A4:8C): Executing op: ODBCDriverManager(,BinaryType=1)
MSI (s) (A4:8C): Executing op:
ActionStart(Name=RemoveFiles,Description=Removing files,Template=File: ,
Directory: )
Action 16:22:16: RemoveFiles. Removing files
MSI (s) (A4:8C): Executing op:
ProgressTotal(Total=6,Type=1,ByteEquivalent=175000)
MSI (s) (A4:8C): Executing op: SetTargetFolder(Folder=C:\Program
Files\Neville J. Lang & Assoc. Pty. Ltd\MyApp\)
MSI (s) (A4:8C): Executing op:
FileRemove(,FileName=CustomInstaller.dll,,ComponentId={744A65BA-5892-931D-2B
24-9A72004BAEFF})
RemoveFiles: File: CustomInstaller.dll, Directory: C:\Program Files\Neville
J. Lang & Assoc. Pty. Ltd\MyApp\
MSI (s) (A4:8C): Verifying accessibility of file: CustomInstaller.dll
MSI (s) (A4:8C): Executing op:
FileRemove(,FileName=MyApp2AB.exe,,ComponentId={56F708D7-CE82-F0E7-6F2A-1654
74305224})
RemoveFiles: File: MyApp2AB.exe, Directory: C:\Program Files\Neville J. Lang
& Assoc. Pty. Ltd\MyApp\
MSI (s) (A4:8C): Verifying accessibility of file: MyApp2AB.exe
MSI (s) (A4:8C): Executing op:
FileRemove(,FileName=MyApp.dat,,ComponentId={14350085-D258-C660-CDFB-DB52B15
1F32A})
RemoveFiles: File: MyApp.dat, Directory: C:\Program Files\Neville J. Lang &
Assoc. Pty. Ltd\MyApp\
MSI (s) (A4:8C): Verifying accessibility of file: MyApp.dat
MSI (s) (A4:8C): Executing op:
FileRemove(,FileName=MyApp_PPC.ARMV4.CAB,,ComponentId={71A0C18A-DEEC-50FD-0F
81-55204A5871AF})
RemoveFiles: File: MyApp_PPC.ARMV4.CAB, Directory: C:\Program Files\Neville
J. Lang & Assoc. Pty. Ltd\MyApp\
MSI (s) (A4:8C): Verifying accessibility of file: MyApp_PPC.ARMV4.CAB
MSI (s) (A4:8C): Executing op:
FileRemove(,FileName=AB2MyApp.exe,,ComponentId={17920A28-5BA9-FE69-FE1D-B9D3
C204CDF0})
RemoveFiles: File: AB2MyApp.exe, Directory: C:\Program Files\Neville J. Lang
& Assoc. Pty. Ltd\MyApp\
MSI (s) (A4:8C): Verifying accessibility of file: AB2MyApp.exe
MSI (s) (A4:8C): Executing op:
FileRemove(,FileName=MyApp_PPC.ARM.CAB,,ComponentId={75C418F2-7BA8-1FF5-33D8
-B0D445B9663A})
RemoveFiles: File: MyApp_PPC.ARM.CAB, Directory: C:\Program Files\Neville J.
Lang & Assoc. Pty. Ltd\MyApp\
MSI (s) (A4:8C): Verifying accessibility of file: MyApp_PPC.ARM.CAB
MSI (s) (A4:8C): Executing op:
ActionStart(Name=InstallFiles,Description=Copying new files,Template=File: ,
Directory: , Size: )
Action 16:22:17: InstallFiles. Copying new files
MSI (s) (A4:8C): Executing op: InstallProtectedFiles(AllowUI=1)
MSI (s) (A4:8C): Executing op: End(Checksum=0,ProgressTotal=1194000)
MSI (s) (A4:8C): FEATURECACHE: Entering Invalidate
MSI (s) (A4:8C): User policy value 'DisableRollback' is 0
MSI (s) (A4:8C): Machine policy value 'DisableRollback' is 0
Action 16:22:17: RollbackCleanup. Removing backup files
RollbackCleanup: File: C:\Config.Msi\175370a.rbf
RollbackCleanup: File: C:\Config.Msi\175370b.rbf
RollbackCleanup: File: C:\Config.Msi\175370c.rbf
RollbackCleanup: File: C:\Config.Msi\175370d.rbf
RollbackCleanup: File: C:\Config.Msi\175370e.rbf
RollbackCleanup: File: C:\Config.Msi\175370f.rbf
MSI (s) (A4:8C): Calling SRSetRestorePoint API. dwRestorePtType: 0,
dwEventType: 103, llSequenceNumber: 919, szDescription: "".
MSI (s) (A4:8C): The call to SRSetRestorePoint API succeeded. Returned
status: 0.
MSI (s) (A4:8C): Unlocking Server
Action ended 16:22:17: InstallFinalize. Return value 1.
Action ended 16:22:17: INSTALL. Return value 1.
Property(S): UpgradeCode = {E1C27455-C2A6-4723-A4B1-642F294A8A11}
Property(S): TARGETDIR = C:\Program Files\Neville J. Lang & Assoc. Pty.
Ltd\MyApp\
Property(S): ProgramMenuFolder = C:\Documents and Settings\Neville
Lang\Start Menu\Programs\
Property(S): DesktopFolder = C:\Documents and Settings\Neville Lang\Desktop\
Property(S): VSDFXAvailable = TRUE
Property(S): VSDSupportedRuntimes = 1.1.4322
Property(S): ProductName = MyApp
Property(S): ProductCode = {E7CD50D2-C004-4A6D-BB30-4E54517A6579}
Property(S): ProductVersion = 1.2.0
Property(S): Manufacturer = Neville J. Lang & Assoc. Pty. Ltd.
Property(S): ARPHELPLINK = www.njlsoftware.com
Property(S): ARPCONTACT = Neville Lang
Property(S): ProductLanguage = 1033
Property(S): SecureCustomProperties =
PREVIOUSVERSIONSINSTALLED;NEWERPRODUCTFOUND
Property(S): RedirectedDllSupport = 2
Property(S): VersionNT = 501
Property(S): VSDNETURLMSG = This setup requires the .NET Framework version
1.1.4322. Please install the .NET Framework and run this setup again. The
.NET Framework can be obtained from the web. Would you like to do this now?
Property(S): VSDIISMSG = This setup requires Internet Information Server 4.0
or higher and Windows NT 4.0, Windows 2000, or Windows XP. This setup
cannot be installed on Windows 95, Windows 98, or Windows Me. Please
install Internet Information Server and run this setup again.
Property(S): VSDUIANDADVERTISED = This advertised application will not be
installed because it might be unsafe. Contact your administrator to change
the installation user interface option of the package to basic.
Property(S): VSDNETMSG = This setup requires the .NET Framework version
1.1.4322. Please install the .NET Framework and run this setup again.
Property(S): VSDINVALIDURLMSG = The specified path '[2]' is unavailable. The
Internet Information Server might not be running or the path exists and is
redirected to another machine. Please check the status of this virtual
directory in the Internet Services Manager.
Property(S): VSDVERSIONMSG = Unable to install because a newer version of
this product is already installed.
Property(S): MaintenanceForm_Action = Repair
Property(S): ErrorDialog = ErrorDialog
Property(S): SFF_UpFldrBtn = UpFldrBtn
Property(S): SFF_NewFldrBtn = NewFldrBtn
Property(S): DefaultUIFont =
VsdDefaultUIFont.524F4245_5254_5341_4C45_534153783400
Property(S): AdminMaintenanceForm_Action = Repair
Property(S): AdminWelcomeForm_NextArgs = AdminFolderForm
Property(S): AdminFolderForm_PrevArgs = AdminWelcomeForm
Property(S): AdminFolderForm_NextArgs = AdminConfirmInstallForm
Property(S): AdminConfirmInstallForm_PrevArgs = AdminFolderForm
Property(S): WelcomeForm_NextArgs = ConfirmInstallForm
Property(S): ConfirmInstallForm_PrevArgs = WelcomeForm
Property(S): PackageCode = {8F534CEC-DB03-45B3-8412-454AB266CFB9}
Property(S): ProductState = 5
Property(S): REMOVE = ALL
Property(S): CURRENTDIRECTORY = C:\Documents and Settings\Neville Lang
Property(S): CLIENTUILEVEL = 2
Property(S): CLIENTPROCESSID = 3620
Property(S): PRODUCTLANGUAGE = 1033
Property(S): VersionDatabase = 200
Property(S): VersionMsi = 2.00
Property(S): WindowsBuild = 2600
Property(S): ServicePackLevel = 1
Property(S): ServicePackLevelMinor = 0
Property(S): MsiNTProductType = 1
Property(S): MsiNTSuitePersonal = 1
Property(S): WindowsFolder = C:\WINDOWS\
Property(S): WindowsVolume = C:\
Property(S): SystemFolder = C:\WINDOWS\System32\
Property(S): System16Folder = C:\WINDOWS\System\
Property(S): RemoteAdminTS = 1
Property(S): TempFolder = C:\DOCUME~1\NEVILL~1\LOCALS~1\Temp\
Property(S): ProgramFilesFolder = C:\Program Files\
Property(S): CommonFilesFolder = C:\Program Files\Common Files\
Property(S): AppDataFolder = C:\Documents and Settings\Neville
Lang\Application Data\
Property(S): FavoritesFolder = C:\Documents and Settings\Neville
Lang\Favorites\
Property(S): NetHoodFolder = C:\Documents and Settings\Neville Lang\NetHood\
Property(S): PersonalFolder = C:\Documents and Settings\Neville Lang\My
Documents\
Property(S): PrintHoodFolder = C:\Documents and Settings\Neville
Lang\PrintHood\
Property(S): RecentFolder = C:\Documents and Settings\Neville Lang\Recent\
Property(S): SendToFolder = C:\Documents and Settings\Neville Lang\SendTo\
Property(S): TemplateFolder = C:\Documents and Settings\Neville
Lang\Templates\
Property(S): CommonAppDataFolder = C:\Documents and Settings\All
Users\Application Data\
Property(S): LocalAppDataFolder = C:\Documents and Settings\Neville
Lang\Local Settings\Application Data\
Property(S): MyPicturesFolder = C:\Documents and Settings\Neville Lang\My
Documents\My Pictures\
Property(S): AdminToolsFolder = C:\Documents and Settings\Neville Lang\Start
Menu\Programs\Administrative Tools\
Property(S): StartupFolder = C:\Documents and Settings\Neville Lang\Start
Menu\Programs\Startup\
Property(S): StartMenuFolder = C:\Documents and Settings\Neville Lang\Start
Menu\
Property(S): FontsFolder = C:\WINDOWS\Fonts\
Property(S): GPTSupport = 1
Property(S): OLEAdvtSupport = 1
Property(S): ShellAdvtSupport = 1
Property(S): Intel = 15
Property(S): PhysicalMemory = 479
Property(S): VirtualMemory = 879
Property(S): AdminUser = 1
Property(S): LogonUser = Neville Lang
Property(S): UserSID = S-1-5-21-239712180-97400744-1281840561-1006
Property(S): UserLanguageID = 3081
Property(S): ComputerName = CPQLAP
Property(S): SystemLanguageID = 3081
Property(S): ScreenX = 1024
Property(S): ScreenY = 768
Property(S): CaptionHeight = 26
Property(S): BorderTop = 1
Property(S): BorderSide = 1
Property(S): TextHeight = 16
Property(S): ColorBits = 32
Property(S): TTCSupport = 1
Property(S): MsiNetAssemblySupport = 1.1.4322.573
Property(S): MsiWin32AssemblySupport = 5.1.2600.1515
Property(S): Time = 16:22:17
Property(S): Date = 25/08/2004
Property(S): Privileged = 1
Property(S): USERNAME = Neville Lang
Property(S): COMPANYNAME = Neville J. Lang & Assoc. Pty. Ltd.
Property(S): Installed = 2004/08/25 16:16:28
Property(S): DATABASE = C:\WINDOWS\Installer\1753705.msi
Property(S): OriginalDatabase = C:\WINDOWS\Installer\1753705.msi
Property(S): UILevel = 3
Property(S): Preselected = 1
Property(S): ACTION = INSTALL
Property(S): VSDFxConfigFile = C:\DOCUME~1\NEVILL~1\LOCALS~1\Temp\CFG136.tmp
Property(S): ROOTDRIVE = C:\
Property(S): CostingComplete = 1
Property(S): OutOfDiskSpace = 0
Property(S): OutOfNoRbDiskSpace = 0
Property(S): PrimaryVolumeSpaceAvailable = 0
Property(S): PrimaryVolumeSpaceRequired = 0
Property(S): PrimaryVolumeSpaceRemaining = 0
Property(S): INSTALLLEVEL = 1
=== Logging stopped: 25/08/2004 16:22:18 ===
MSI (s) (A4:8C): Note: 1: 1724
MSI (s) (A4:8C): Note: 1: 2262 2: Error 3: -2147287038
MSI (s) (A4:8C): Note: 1: 2262 2: Error 3: -2147287038
MSI (s) (A4:8C): Product: MyApp -- Removal completed successfully.

MSI (s) (A4:8C): Cleaning up uninstalled install packages, if any exist
MSI (s) (A4:8C): Post-install cleanup: removing installer file
'C:\WINDOWS\Installer\1753705.msi'
MSI (s) (A4:8C): MainEngineThread is returning 0
MSI (c) (24:48): Decrementing counter to disable shutdown. If counter >= 0,
shutdown will be denied. Counter after decrement: -1
MSI (c) (24:48): MainEngineThread is returning 0
=== Verbose logging stopped: 25/08/2004 16:22:18 ===

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Martin v. Löwis
2004-08-25 07:52:16 UTC
Permalink
Post by Neville Lang
public override void Uninstall(IDictionary savedState)
{
MessageBox.Show("Do you want to proceed (UnInstaller)?");
...
...
}
is not being called.
Can you find out what the name of the custom action is, in the
CustomAction table? Use orca.exe to study the MSI file; if you
don't have orca.exe yet, install it from orca.msi in the Platform
SDK's bin directory, with the Installer SDK installed.

There are a number of custom actions skipped. Most likely, the
one that you are looking for is.
Post by Neville Lang
_634A9943_325D_4742_A922_ED2F4E0A4A49.uninstall.SetProperty (condition is
false)
_634A9943_325D_4742_A922_ED2F4E0A4A49.uninstall (condition is false)
These actions are skipped because the condition of the action is false.
To find out why that is, it would be helpful to find out what the
condition is, in the first place. Look into the InstallExecuteSequence
table to learn about the conditions; sorting by sequence number is
helpful.

Regards,
Martin
Neville Lang
2004-08-25 14:10:53 UTC
Permalink
Martin,

Thank you for your reply.

I already had Orca and looked at the condition as you suggested. I can now
see where you were heading with your feedback. I checked the Condition
column in the InstallExecuteSequence and it was set to:
$C__68B0CE3FA3BF45B292AD23948D810103=2

I checked my earlier MSI files that were uninstalling OK and they had a
similar condition where the ID = 2, though the ID number itself was
different.

What does this condition mean? Is this ID incremented to 2 at some point?

Regards,
Neville Lang
Post by Martin v. Löwis
Post by Neville Lang
public override void Uninstall(IDictionary savedState)
{
MessageBox.Show("Do you want to proceed (UnInstaller)?");
...
...
}
is not being called.
Can you find out what the name of the custom action is, in the
CustomAction table? Use orca.exe to study the MSI file; if you
don't have orca.exe yet, install it from orca.msi in the Platform
SDK's bin directory, with the Installer SDK installed.
There are a number of custom actions skipped. Most likely, the
one that you are looking for is.
Post by Neville Lang
_634A9943_325D_4742_A922_ED2F4E0A4A49.uninstall.SetProperty (condition is
false)
_634A9943_325D_4742_A922_ED2F4E0A4A49.uninstall (condition is false)
These actions are skipped because the condition of the action is false.
To find out why that is, it would be helpful to find out what the
condition is, in the first place. Look into the InstallExecuteSequence
table to learn about the conditions; sorting by sequence number is
helpful.
Regards,
Martin
Phil Wilson
2004-08-25 17:33:49 UTC
Permalink
That's a component condition, and it's true if that component is marked for
uninstallation. I'm wondering if maybe you marked the file associated with
that component as permanent.
--
Phil Wilson [MVP Windows Installer]
----
Post by Neville Lang
Martin,
Thank you for your reply.
I already had Orca and looked at the condition as you suggested. I can now
see where you were heading with your feedback. I checked the Condition
$C__68B0CE3FA3BF45B292AD23948D810103=2
I checked my earlier MSI files that were uninstalling OK and they had a
similar condition where the ID = 2, though the ID number itself was
different.
What does this condition mean? Is this ID incremented to 2 at some point?
Regards,
Neville Lang
Post by Martin v. Löwis
Post by Neville Lang
All I am trying to do at the moment is to find our why my
public override void Uninstall(IDictionary savedState)
{
MessageBox.Show("Do you want to proceed (UnInstaller)?");
...
...
}
is not being called.
Can you find out what the name of the custom action is, in the
CustomAction table? Use orca.exe to study the MSI file; if you
don't have orca.exe yet, install it from orca.msi in the Platform
SDK's bin directory, with the Installer SDK installed.
There are a number of custom actions skipped. Most likely, the
one that you are looking for is.
Post by Neville Lang
_634A9943_325D_4742_A922_ED2F4E0A4A49.uninstall.SetProperty (condition
is
Post by Martin v. Löwis
Post by Neville Lang
false)
_634A9943_325D_4742_A922_ED2F4E0A4A49.uninstall (condition is false)
These actions are skipped because the condition of the action is false.
To find out why that is, it would be helpful to find out what the
condition is, in the first place. Look into the InstallExecuteSequence
table to learn about the conditions; sorting by sequence number is
helpful.
Regards,
Martin
Martin v. Löwis
2004-08-25 20:27:06 UTC
Permalink
Post by Phil Wilson
That's a component condition, and it's true if that component is marked for
uninstallation. I'm wondering if maybe you marked the file associated with
that component as permanent.
I notice a irregularity in the log file he sent earlier:

MSI (s) (A4:8C): Component: C__68B0CE3FA3BF45B292AD23948D810103; Installed:
Local; Request: Absent; Action: FileAbsent
MSI (s) (A4:8C): Component: C__8448ABC12DAA4A55A2E936D3E24251E7; Installed:
Local; Request: Absent; Action: Absent
MSI (s) (A4:8C): Component: C__C132B15B96AD448FAF52EE9CF6D31C12; Installed:
Local; Request: Absent; Action: Absent

The component we talk about is C__68B0CE3FA3BF45B292AD23948D810103;
so its Action is FileAbsent, not Absent. What is the numeric value
of FileAbsent? The description says

"Installer actually uninstalls component's files and leaves all other
resources of the component installed."

What are the "other resources" in this context?

Neville, to debug this further, it might be best if you could somehow
display the value of $C__68B0CE3FA3BF45B292AD23948D810103 - although
I'm uncertain of how precisely you should do that.
Session.EvaluateCondition may come close - although its return
values appear to be limited. Session.ComponentRequestState should be
2, as the log file says Request: is Absent.

Can you find out whether there is anything "strange" about this
component? Essentially, you would need to look into all tables, to
see whether it occurs anywhere. Possible place are the File table
(ok), the Registry table (would be very surprising - AFAIK, components
either have files, or registry keys, but not both), the Extension
table (does that ring a bell?), others(?)

Regards,
Martin
Neville Lang
2004-08-26 01:27:26 UTC
Permalink
Martin,
Post by Martin v. Löwis
Neville, to debug this further, it might be best if you could somehow
display the value of $C__68B0CE3FA3BF45B292AD23948D810103 - although
I'm uncertain of how precisely you should do that.
Session.EvaluateCondition may come close - although its return
values appear to be limited. Session.ComponentRequestState should be
2, as the log file says Request: is Absent.
I simply use VS .NET 2003 and a Setup project to generate the MSI file when
I build my solution. I am not sure how to go about using
Session.EvaluateCondition or Session.ComponentRequestState. Since my Custom
Action code is not called, I cannot get the debugger started, if that is
what you were referring to.

The component in question is my CustomInstaller.dll file. It does show up in
the File table along with a number of others. I cannot see any values in
that table that make this file any different to the others. There are no
entries in the Registry table or the Extension table.

You may have a point with regard to FileAbsent and Absent. Phil (or others)
may be able to shed some light on this.

Hopefully, we can get to the bottom of this problem.

Regards,
Neville Lang
Post by Martin v. Löwis
Post by Phil Wilson
That's a component condition, and it's true if that component is marked for
uninstallation. I'm wondering if maybe you marked the file associated with
that component as permanent.
Local; Request: Absent; Action: FileAbsent
Local; Request: Absent; Action: Absent
Local; Request: Absent; Action: Absent
The component we talk about is C__68B0CE3FA3BF45B292AD23948D810103;
so its Action is FileAbsent, not Absent. What is the numeric value
of FileAbsent? The description says
"Installer actually uninstalls component's files and leaves all other
resources of the component installed."
What are the "other resources" in this context?
Neville, to debug this further, it might be best if you could somehow
display the value of $C__68B0CE3FA3BF45B292AD23948D810103 - although
I'm uncertain of how precisely you should do that.
Session.EvaluateCondition may come close - although its return
values appear to be limited. Session.ComponentRequestState should be
2, as the log file says Request: is Absent.
Can you find out whether there is anything "strange" about this
component? Essentially, you would need to look into all tables, to
see whether it occurs anywhere. Possible place are the File table
(ok), the Registry table (would be very surprising - AFAIK, components
either have files, or registry keys, but not both), the Extension
table (does that ring a bell?), others(?)
Regards,
Martin
Martin v. Löwis
2004-08-26 06:33:03 UTC
Permalink
Post by Neville Lang
The component in question is my CustomInstaller.dll file. It does show up in
the File table along with a number of others. I cannot see any values in
that table that make this file any different to the others. There are no
entries in the Registry table or the Extension table.
Is, by any chance, the msidbComponentAttributesSharedDllRefCount flag
(8) set on this component? If so, check the registry at the shared
DLLs location (which I forgot the path to) for interesting entries.

I am surprised you say CustomInstaller.dll belongs to this component.
I see

FileRemove(,FileName=CustomInstaller.dll,,ComponentId={744A65BA-5892-931D-2B
24-9A72004BAEFF})

whereas you earlier said we are talking about
68B0CE3FA3BF45B292AD23948D810103 which appears to be different. Could it
be that the same file belongs to two components? That would be bad.

I also see

AssemblyUnpublish(Feature=DefaultFeature,Component={744A65BA-5892-931D-2B24-
9A72004BAEFF}
MsiUnpublishAssemblies: Application Context:C:|Program Files|Neville J. Lang
& Assoc. Pty. Ltd|MyApp|CustomInstaller.dll, Assembly
Name:CustomInstaller,Version="1.2.0.0",Culture="neutral"
MSI (s) (A4:8C): Note: 1: 1402 2: UNKNOWN\Installer\Assemblies\C:|Program
Files|Neville J. Lang & Assoc. Pty. Ltd|MyApp|CustomInstaller.dll 3: 2
MSI (s) (A4:8C): Note: 1: 1402 2: UNKNOWN\Installer\Assemblies\C:|Program
Files|Neville J. Lang & Assoc. Pty. Ltd|MyApp|CustomInstaller.dll 3: 2

Now, 1402 is the error message

Could not open key: [2].System error [3].

My guess that the UNKNOWN registry root is a problem. Do you have any
remaining keys under Installer\Assemblies in your registry, either
under HKEY_LOCAL_SYSTEM, or HKEY_CURRENT_USER?

Regards,
Martin
Neville Lang
2004-08-26 08:08:58 UTC
Permalink
Martin,
Post by Martin v. Löwis
Is, by any chance, the msidbComponentAttributesSharedDllRefCount flag
(8) set on this component? If so, check the registry at the shared
DLLs location (which I forgot the path to) for interesting entries.
** Sorry to be vague but where would I see
"msidbComponentAttributesSharedDllRefCount flag"? Can it be seen in Orca?
Post by Martin v. Löwis
I am surprised you say CustomInstaller.dll belongs to this component.
I see
FileRemove(,FileName=CustomInstaller.dll,,ComponentId={744A65BA-5892-931D-2B
Post by Martin v. Löwis
24-9A72004BAEFF})
whereas you earlier said we are talking about
68B0CE3FA3BF45B292AD23948D810103 which appears to be different. Could it
be that the same file belongs to two components? That would be bad.
** The component C__68B0CE3FA3BF45B292AD23948D810103 maps to the CompnentId
{744A65BA-5892-931D-2B24-9A72004BAEFF} in the Component table, and component
C__68B0CE3FA3BF45B292AD23948D810103 maps to my CustomInstaller.dll file in
the File table. I do not see any problem here as the Component (number) and
ComponentId are linked and mapped to only this DLL file.
Post by Martin v. Löwis
I also see
AssemblyUnpublish(Feature=DefaultFeature,Component={744A65BA-5892-931D-2B24-
Post by Martin v. Löwis
9A72004BAEFF}
MsiUnpublishAssemblies: Application Context:C:|Program Files|Neville J. Lang
& Assoc. Pty. Ltd|MyApp|CustomInstaller.dll, Assembly
Name:CustomInstaller,Version="1.2.0.0",Culture="neutral"
MSI (s) (A4:8C): Note: 1: 1402 2: UNKNOWN\Installer\Assemblies\C:|Program
Files|Neville J. Lang & Assoc. Pty. Ltd|MyApp|CustomInstaller.dll 3: 2
MSI (s) (A4:8C): Note: 1: 1402 2: UNKNOWN\Installer\Assemblies\C:|Program
Files|Neville J. Lang & Assoc. Pty. Ltd|MyApp|CustomInstaller.dll 3: 2
Now, 1402 is the error message
Could not open key: [2].System error [3].
My guess that the UNKNOWN registry root is a problem. Do you have any
remaining keys under Installer\Assemblies in your registry, either
under HKEY_LOCAL_SYSTEM, or HKEY_CURRENT_USER?
** Interesting. You may have a point here. Could it be that the Uninstall
process is failing to work out if the installation was on a per-user or
per-machine basis? I will check the registry entries again after I run the
Installer and Uninstaller again and report back.

Regards,
Neville Lang
Martin v. Löwis
2004-08-26 21:44:07 UTC
Permalink
Post by Neville Lang
Post by Martin v. Löwis
Is, by any chance, the msidbComponentAttributesSharedDllRefCount flag
(8) set on this component? If so, check the registry at the shared
DLLs location (which I forgot the path to) for interesting entries.
** Sorry to be vague but where would I see
"msidbComponentAttributesSharedDllRefCount flag"? Can it be seen in Orca?
In the Component table, look at the Attributes column. It's a bit mask;
check whether bit 8 is set. See "Component Table [Windows Installer]"
in MSDN.
Post by Neville Lang
** The component C__68B0CE3FA3BF45B292AD23948D810103 maps to the CompnentId
{744A65BA-5892-931D-2B24-9A72004BAEFF} in the Component table, and component
C__68B0CE3FA3BF45B292AD23948D810103 maps to my CustomInstaller.dll file in
the File table. I do not see any problem here as the Component (number) and
ComponentId are linked and mapped to only this DLL file.
Ah, ok. I had somehow hoped that VC would make the synthesized component
names match the ComponentIds. To study MSI files, you need component
names at some times, and uuids at other.
Post by Neville Lang
** Interesting. You may have a point here. Could it be that the Uninstall
process is failing to work out if the installation was on a per-user or
per-machine basis?
Which of these two was it? Assuming the product ID of your package is
2D05DC7E400CD6A4BB03E44515A75697, I see these messages in the log file:

MSI (s) (A4:8C): Setting cached product context: User non-assigned for
product: 2D05DC7E400CD6A4BB03E44515A75697
MSI (s) (A4:8C): Determined that existing product (either this product
or the product being upgraded with a patch) is installed per-user.

So it believes this to be a per-user installation. Is that correct?

On another note: Your log file says

MSI (s) (A4:8C): Skipping action:
_634A9943_325D_4742_A922_ED2F4E0A4A49.uninstall.SetProperty (condition
is false)

What is the SetProperty action, and what is the condition on *this*
action?

Regards,
Martin
Neville Lang
2004-08-26 01:16:04 UTC
Permalink
Phil,
Post by Phil Wilson
That's a component condition, and it's true if that component is marked for
uninstallation.
** OK, thanks for that.
Post by Phil Wilson
I'm wondering if maybe you marked the file associated with
that component as permanent.
** I have VS .NET 2003 and in my solution, I have a Setup project. When I
build the solution for my .NET app, the .MSI file is auto. created. I am not
making any other external changes to the MSI. The component in question is
my CustomInstaller.dll file (built in the .NET solution). This file's
properties in the Setup project shows Permanent = false.

** Using Orca and looking at the InstallExecuteSequence table, I am
beginning to get an idea of the flow of the log file though I still do fully
understand all of the lines. This particular problem of mine is helping me
to understand more of how the Windows Installer works.

Regards,
Neville Lang
Phil Wilson
2004-08-31 21:32:52 UTC
Permalink
In the VS setup project, selecting a file to be installed, F4 or right-click
Properties shows the install properties of that file. There is a Permanent
property, and if it's set the file will not be uninstalled. (There are also
some other settings like SharedLegacyFile that affect the value in
HKLM\.Software\Microsoft\.......SharedDLLs. )

Visual Studio's uninstall custom actions are conditioned on the component
being uninstalled. If the component is Permanent, it is not uninstalled, the
component is not marked for uninstall and the uninstall CA therefore never
gets called. What complicates this is that the component Guids used by VS
are related to the file name, so any time you use that file name again you
get a Guid that looks like it's permanently installed on the system. So if
you set Permanent on a particular file name, it looks like you're stuck with
that Guid always being installed and an uninstall CA based on the uninstall
of that Guid will never be called. So if you *ever* marked that file name as
Permanent you're probably stuck with it permanent.
--
Phil Wilson [MVP Windows Installer]
----
Post by Neville Lang
Phil,
Post by Phil Wilson
That's a component condition, and it's true if that component is marked
for
Post by Phil Wilson
uninstallation.
** OK, thanks for that.
Post by Phil Wilson
I'm wondering if maybe you marked the file associated with
that component as permanent.
** I have VS .NET 2003 and in my solution, I have a Setup project. When I
build the solution for my .NET app, the .MSI file is auto. created. I am not
making any other external changes to the MSI. The component in question is
my CustomInstaller.dll file (built in the .NET solution). This file's
properties in the Setup project shows Permanent = false.
** Using Orca and looking at the InstallExecuteSequence table, I am
beginning to get an idea of the flow of the log file though I still do fully
understand all of the lines. This particular problem of mine is helping me
to understand more of how the Windows Installer works.
Regards,
Neville Lang
Neville Lang
2004-09-01 06:35:28 UTC
Permalink
Phil,

In my VS .NET 2003, I checked the properties for CustomInstaller.dll listed
under the Setup project and it has "false" as a value for all properties
requiring true/false, with the exception of the Vital property where it has
a true. If I remember, these are the defaults and these are all I have used.
I am sure this is not the problem however, I will take a note of this for
the future.

Regards,
Neville Lang
Post by Phil Wilson
In the VS setup project, selecting a file to be installed, F4 or right-click
Properties shows the install properties of that file. There is a Permanent
property, and if it's set the file will not be uninstalled. (There are also
some other settings like SharedLegacyFile that affect the value in
HKLM\.Software\Microsoft\.......SharedDLLs. )
Visual Studio's uninstall custom actions are conditioned on the component
being uninstalled. If the component is Permanent, it is not uninstalled, the
component is not marked for uninstall and the uninstall CA therefore never
gets called. What complicates this is that the component Guids used by VS
are related to the file name, so any time you use that file name again you
get a Guid that looks like it's permanently installed on the system. So if
you set Permanent on a particular file name, it looks like you're stuck with
that Guid always being installed and an uninstall CA based on the uninstall
of that Guid will never be called. So if you *ever* marked that file name as
Permanent you're probably stuck with it permanent.
--
Phil Wilson [MVP Windows Installer]
----
Post by Neville Lang
Phil,
Post by Phil Wilson
That's a component condition, and it's true if that component is marked
for
Post by Phil Wilson
uninstallation.
** OK, thanks for that.
Post by Phil Wilson
I'm wondering if maybe you marked the file associated with
that component as permanent.
** I have VS .NET 2003 and in my solution, I have a Setup project. When I
build the solution for my .NET app, the .MSI file is auto. created. I am
not
Post by Neville Lang
making any other external changes to the MSI. The component in question is
my CustomInstaller.dll file (built in the .NET solution). This file's
properties in the Setup project shows Permanent = false.
** Using Orca and looking at the InstallExecuteSequence table, I am
beginning to get an idea of the flow of the log file though I still do
fully
Post by Neville Lang
understand all of the lines. This particular problem of mine is helping me
to understand more of how the Windows Installer works.
Regards,
Neville Lang
Neville Lang
2004-09-02 14:51:04 UTC
Permalink
Phil and Martin,

I am just letting you know that I have finally fixed my problem of the CA
not being called during Uninstalling.

Reading Phil's book gave me a lot more knowledge of the Install / Uninstall
process and some insight into how it all works.

I ended up thoroughly checking the registry for the ProductCode on both this
current version and on an earlier version. Apparently, there were some
traces in the registry of the previous ProductCode that I thought were all
deleted. The particular one I think caused my problem was one located at
HKLM\Software\Microsoft\Windows\CurrentVersion\Installer\UserData\S-1-5-21-.
..\Components\AB56A44...
This component key had two entries, one for the current ProductCode and one
for the previous ProductCode both pointing to my CustomInstaller.dll. Though
I had deleted two other entries of the older ProductCode, this was the one
that I think caused the problem.

When the Uninstaller now runs, it successfully calls my CA and now I can run
the debugger.

Thank you both for your feedback on this problem.

Regards,
Neville Lang
Post by Neville Lang
Phil,
Post by Phil Wilson
That's a component condition, and it's true if that component is marked
for
Post by Phil Wilson
uninstallation.
** OK, thanks for that.
Post by Phil Wilson
I'm wondering if maybe you marked the file associated with
that component as permanent.
** I have VS .NET 2003 and in my solution, I have a Setup project. When I
build the solution for my .NET app, the .MSI file is auto. created. I am not
making any other external changes to the MSI. The component in question is
my CustomInstaller.dll file (built in the .NET solution). This file's
properties in the Setup project shows Permanent = false.
** Using Orca and looking at the InstallExecuteSequence table, I am
beginning to get an idea of the flow of the log file though I still do fully
understand all of the lines. This particular problem of mine is helping me
to understand more of how the Windows Installer works.
Regards,
Neville Lang
Neville Lang
2004-08-26 05:05:45 UTC
Permalink
Phil,

Can I presume that it was you that wrote the book "The Definitive Guide to
Windows Installer"? I made an assumption in my previous post.

If it was you then I just want to say that I have now received your book
from Amazon.com. It took only 2 days to deliver it from USA to Australia. I
did not expect it for a few more days so it was most unexpected.

I am now keen to get started on reading it and to get some insight into how
the Windows Installer works.

The project I am working on that generated this post is a vertical market
application for the Pocket PC targeted for any person who owns a Pocket PC.
This application is written in C# for the .NET Compact Framework. It stores
data in a custom-written database (not SQL) on the Pocket PC and interworks
and shares that data with a 3rd-party app on the desktop using a .NET exe
that controls data file backup between the desktop and Pocket PC (when
synchronising) and optionally includes reformatting and merging the data for
the 3rd party app, if it exists on the desktop. Likewise, the user can
double-click on an icon on the Windows desktop to download the latest data
from the 3rd party app to my Pocket PC app.

We sell this application only on CD and it was for this reason I chose to
use the Windows Installer technology. I can control the installation at the
one point for installation on both the desktop-side and Pocket PC-side using
Windows Installer and RAPI, all via the custom actions for install and
uninstall. I thought I better give you (and others) the background to this
project.

By design, I chose to only uninstall this application on both the desktop
and Pocket PC from one point using the Uninstall custom action of the
Windows Installer. This way our customers can simply use the Remove button
on the desktop in the Add/Remove programs to remove everything from both
computers.

One thing I found a bit more difficult in the Uninstall process was the
ability to remotely remove everything on the Pocket PC via my custom action.
During that process, I need to know what special folders on the Pocket PC
were used to initially install some files, in particular a font file. Since
the Pocket PC operating system, and for that matter the desktop operating
system, can be in any local language such as English, German, French etc.,
it was more difficult to interrogate the Pocket PC operating system for
special folders since no such function exists in RAPI. I ended up depending
on the Pocket PC app being started once and creating a text file of these
special folders on that operating system so that if the Uninstall is called
on the desktop to remove the application, the call to my custom action code
can then copy over that text file and use the paths for special folders to
control the removal process in the Pocket PC from the Uninstall custom
action. All of this has worked surprisingly well up until this current
Uninstall problem on my development computer.

Because of my lack of knowledge on the Windows Installer (that's why I
purchased your book), I do not yet know whether the Installer side (or
Uninstall side) can be any help in being able to improve my technique of
getting the special folders on the Pocket PC for the uninstall process on
the desktop.

Just quickly skimming the contents of your book, I did not see any
references to Pocket PC installations using .MSI. In the Pocket PC world
using .NET, information on deployment using MSI is scant so it might be
useful in a future update to your book to add a chapter for this type of
installation particularly for others who are trying to also install the SQL
database on their Pocket PCs. There are always deployment queries in this
area in the Pocket PC newsgroups. Just a thought.

Regards,
Neville Lang
Phil Wilson
2004-08-31 21:50:39 UTC
Permalink
I hope the book is useful!

I didn't look at Pocket PC issues - I probably assumed that most of the
Windows Installer ideas also applied to Pocket PCs.

Something I have noticed is that .NET programmers use Installer classes even
when alternatives exist. For example, it's a shame that VS setup projects
install Services with Installer classes because Windows Installer has good
support for installing Services, both .NET and Win32 Services, but VS
doesn't use them. The idea that installations require more code when they
could be table driven with Installer tables just seems a step in the wrong
direction. Plus the support for calling VBScript and C++ custom actions and
having access to the installer properties is something people ignore in
favor of Installer classes (which are complicated by a shim DLL, some
issues with loading assemblies, and confusing access to properties via the
shim). Also, removing files can be done with the RemoveFile table. The
overall difficulty is that programmers are using VS setup projects a lot and
running into the limitations of VS setups. There's a reason products by 3rd
party products are expensive (InstallShield, Wise, ActiveInstall etc), and
that's because they expose much more MSI functionality and make building
patches etc much easier. There's othing wrong with VS setup projects as long
as people accept that they don't let you do everything and have some
features that are designed to protect you from the guts of MSI setups.
--
Phil Wilson [MVP Windows Installer]
----
Post by Neville Lang
Phil,
Can I presume that it was you that wrote the book "The Definitive Guide to
Windows Installer"? I made an assumption in my previous post.
If it was you then I just want to say that I have now received your book
from Amazon.com. It took only 2 days to deliver it from USA to Australia. I
did not expect it for a few more days so it was most unexpected.
I am now keen to get started on reading it and to get some insight into how
the Windows Installer works.
The project I am working on that generated this post is a vertical market
application for the Pocket PC targeted for any person who owns a Pocket PC.
This application is written in C# for the .NET Compact Framework. It stores
data in a custom-written database (not SQL) on the Pocket PC and interworks
and shares that data with a 3rd-party app on the desktop using a .NET exe
that controls data file backup between the desktop and Pocket PC (when
synchronising) and optionally includes reformatting and merging the data for
the 3rd party app, if it exists on the desktop. Likewise, the user can
double-click on an icon on the Windows desktop to download the latest data
from the 3rd party app to my Pocket PC app.
We sell this application only on CD and it was for this reason I chose to
use the Windows Installer technology. I can control the installation at the
one point for installation on both the desktop-side and Pocket PC-side using
Windows Installer and RAPI, all via the custom actions for install and
uninstall. I thought I better give you (and others) the background to this
project.
By design, I chose to only uninstall this application on both the desktop
and Pocket PC from one point using the Uninstall custom action of the
Windows Installer. This way our customers can simply use the Remove button
on the desktop in the Add/Remove programs to remove everything from both
computers.
One thing I found a bit more difficult in the Uninstall process was the
ability to remotely remove everything on the Pocket PC via my custom action.
During that process, I need to know what special folders on the Pocket PC
were used to initially install some files, in particular a font file. Since
the Pocket PC operating system, and for that matter the desktop operating
system, can be in any local language such as English, German, French etc.,
it was more difficult to interrogate the Pocket PC operating system for
special folders since no such function exists in RAPI. I ended up depending
on the Pocket PC app being started once and creating a text file of these
special folders on that operating system so that if the Uninstall is called
on the desktop to remove the application, the call to my custom action code
can then copy over that text file and use the paths for special folders to
control the removal process in the Pocket PC from the Uninstall custom
action. All of this has worked surprisingly well up until this current
Uninstall problem on my development computer.
Because of my lack of knowledge on the Windows Installer (that's why I
purchased your book), I do not yet know whether the Installer side (or
Uninstall side) can be any help in being able to improve my technique of
getting the special folders on the Pocket PC for the uninstall process on
the desktop.
Just quickly skimming the contents of your book, I did not see any
references to Pocket PC installations using .MSI. In the Pocket PC world
using .NET, information on deployment using MSI is scant so it might be
useful in a future update to your book to add a chapter for this type of
installation particularly for others who are trying to also install the SQL
database on their Pocket PCs. There are always deployment queries in this
area in the Pocket PC newsgroups. Just a thought.
Regards,
Neville Lang
Neville Lang
2004-09-01 07:12:04 UTC
Permalink
Phil,

While I have been using the Windows Installer in my app deployment for just
on a year, an app for consumers rather than corporate, until now, I have not
bothered to dig any deeper into this technology due to time restraints. Now
that I have a problem in this area it has forced me to get further into the
Windows Installer.

After having purchased your book, "The Definitive Guide to Windows
Installer" last week, I can now tell you that I have completed reading your
book from beginning to end. For me, the information was great as I can now
understand the design principles of the Windows Installer. Because I use VS
.NET 2003 and C# to create my Pocket PC .NET Compact Framework app and use
Windows Installer to deploy EXEs to both the desktop computer and Pocket PC,
your book and the examples you use for VS .NET was just the thing I needed
to get up to speed. I can now better understand the reasons behind the
Windows Installer design given all of the different deployment scenarios.

Your presentation of the material was easy to understand and you also
provided some good ideas on how to modify a MSI file using ORCA and
transforms enabling a developer to "drive" the Windows Installer and make
better use of it. You also explained clearly the limitations of the Setup
project provided in VS .NET but with the examples you provide, I think I
could now work around these restrictions.

I have found your book to now be a great resource and would recommend it to
anyone who wants to further their knowledge of the Windows Installer. Well
done!

One particular point that helped me was that you give some good examples of
the entries in the log file so that I am now better able to better
understand what I am looking at and what is going on from the log file.

While I have not had time to get back to the original problem that forced my
posting, armed with the knowledge from your book, I am sure that I can
resolve it. Naturally, I will post back if I have any further queries.

Regards,
Neville Lang
Post by Phil Wilson
I hope the book is useful!
I didn't look at Pocket PC issues - I probably assumed that most of the
Windows Installer ideas also applied to Pocket PCs.
Something I have noticed is that .NET programmers use Installer classes even
when alternatives exist. For example, it's a shame that VS setup projects
install Services with Installer classes because Windows Installer has good
support for installing Services, both .NET and Win32 Services, but VS
doesn't use them. The idea that installations require more code when they
could be table driven with Installer tables just seems a step in the wrong
direction. Plus the support for calling VBScript and C++ custom actions and
having access to the installer properties is something people ignore in
favor of Installer classes (which are complicated by a shim DLL, some
issues with loading assemblies, and confusing access to properties via the
shim). Also, removing files can be done with the RemoveFile table. The
overall difficulty is that programmers are using VS setup projects a lot and
running into the limitations of VS setups. There's a reason products by 3rd
party products are expensive (InstallShield, Wise, ActiveInstall etc), and
that's because they expose much more MSI functionality and make building
patches etc much easier. There's othing wrong with VS setup projects as long
as people accept that they don't let you do everything and have some
features that are designed to protect you from the guts of MSI setups.
--
Phil Wilson [MVP Windows Installer]
----
Post by Neville Lang
Phil,
Can I presume that it was you that wrote the book "The Definitive Guide to
Windows Installer"? I made an assumption in my previous post.
If it was you then I just want to say that I have now received your book
from Amazon.com. It took only 2 days to deliver it from USA to
Australia.
Post by Phil Wilson
I
Post by Neville Lang
did not expect it for a few more days so it was most unexpected.
I am now keen to get started on reading it and to get some insight into
how
Post by Neville Lang
the Windows Installer works.
The project I am working on that generated this post is a vertical market
application for the Pocket PC targeted for any person who owns a Pocket
PC.
Post by Neville Lang
This application is written in C# for the .NET Compact Framework. It
stores
Post by Neville Lang
data in a custom-written database (not SQL) on the Pocket PC and
interworks
Post by Neville Lang
and shares that data with a 3rd-party app on the desktop using a .NET exe
that controls data file backup between the desktop and Pocket PC (when
synchronising) and optionally includes reformatting and merging the data
for
Post by Neville Lang
the 3rd party app, if it exists on the desktop. Likewise, the user can
double-click on an icon on the Windows desktop to download the latest data
from the 3rd party app to my Pocket PC app.
We sell this application only on CD and it was for this reason I chose to
use the Windows Installer technology. I can control the installation at
the
Post by Neville Lang
one point for installation on both the desktop-side and Pocket PC-side
using
Post by Neville Lang
Windows Installer and RAPI, all via the custom actions for install and
uninstall. I thought I better give you (and others) the background to this
project.
By design, I chose to only uninstall this application on both the desktop
and Pocket PC from one point using the Uninstall custom action of the
Windows Installer. This way our customers can simply use the Remove button
on the desktop in the Add/Remove programs to remove everything from both
computers.
One thing I found a bit more difficult in the Uninstall process was the
ability to remotely remove everything on the Pocket PC via my custom
action.
Post by Neville Lang
During that process, I need to know what special folders on the Pocket PC
were used to initially install some files, in particular a font file.
Since
Post by Neville Lang
the Pocket PC operating system, and for that matter the desktop operating
system, can be in any local language such as English, German, French etc.,
it was more difficult to interrogate the Pocket PC operating system for
special folders since no such function exists in RAPI. I ended up
depending
Post by Neville Lang
on the Pocket PC app being started once and creating a text file of these
special folders on that operating system so that if the Uninstall is
called
Post by Neville Lang
on the desktop to remove the application, the call to my custom action
code
Post by Neville Lang
can then copy over that text file and use the paths for special folders to
control the removal process in the Pocket PC from the Uninstall custom
action. All of this has worked surprisingly well up until this current
Uninstall problem on my development computer.
Because of my lack of knowledge on the Windows Installer (that's why I
purchased your book), I do not yet know whether the Installer side (or
Uninstall side) can be any help in being able to improve my technique of
getting the special folders on the Pocket PC for the uninstall process on
the desktop.
Just quickly skimming the contents of your book, I did not see any
references to Pocket PC installations using .MSI. In the Pocket PC world
using .NET, information on deployment using MSI is scant so it might be
useful in a future update to your book to add a chapter for this type of
installation particularly for others who are trying to also install the
SQL
Post by Neville Lang
database on their Pocket PCs. There are always deployment queries in this
area in the Pocket PC newsgroups. Just a thought.
Regards,
Neville Lang
Loading...