MSI error 1638 from depending on VC runtime

  • Thread starter Thread starter Norman Diamond
  • Start date Start date
N

Norman Diamond

A project depends on VC runtime from Visual Studio 2005 SP1, and DotNet
Framework 2. Options are set in the setup project properties, so if these
two dependencies are not already installed then this installer will install
them.

But what about the situation where VC runtime has already been installed?
In fact it's been installed twice. Although the project was built on a
Windows XP system with Visual Studio 2005 SP1 and the results were copied to
a Vista system to be installed, it happens that this Vista system already
has Visual Studio 2005 SP1 plus Vista hotfix. And since a project which
requires VC runtime has already been installed on this Vista system, that
project's installer already installed a second copy of VC runtime. So here
we are with Visual Studio 2005 SP1 building an installer which tries to
install a third copy of VC runtime, and this fails with MSI error 1638.

Due to this failure, the installer proceeds to refuse to install the
application.

For some reason the installer figures out that DotNet Framework 2 is already
installed (one copy or two I'm not sure), so it doesn't try to install an
extra copy of that.

Since it seems that the maximum allowable number of redundant copies of the
VC runtime from Visual Studio 2005 SP1 is two, and a third one fails, is
there some way to tell Visual Studio 2005 SP1 to build an installer which
will only try to install the VC runtime when the maximum allowable number of
redundant copies hasn't been reached yet?

Here's the log of the installation failure.


The following properties have been set:
Property: [AdminUser] = true {boolean}
Property: [ProcessorArchitecture] = Intel {string}
Property: [VersionNT] = 6.0.0 {version}
Running checks for package '.NET Framework 2.0', phase BuildList
Running external check with command line
"E:\Users\soft1\AppData\Local\Temp\VSDBA68.tmp\dotnetfx\dotnetchk.exe" -lcid:1041
Process exited with code 2
Setting value '2 {int}' for property 'DotNetInstalled'
Reading value 'Version' of registry key 'HKLM\Software\Microsoft\Internet
Explorer'
Read string value '7.0.6000.16575'
Setting value '7.0.6000.16575 {string}' for property 'IEVersion'
The following properties have been set for package '.NET Framework 2.0':
Property: [DotNetInstalled] = 2 {int}
Property: [IEVersion] = 7.0.6000.16575 {string}
Running checks for command 'dotnetfx\instmsia.exe'
Result of running operator 'ValueExists' on property 'VersionNT': true
Result of checks for command 'dotnetfx\instmsia.exe' is 'Bypass'
Running checks for command 'dotnetfx\WindowsInstaller-KB893803-v2-x86.exe'
Result of running operator 'ValueExists' on property 'Version9x': false
Result of running operator 'VersionLessThan' on property 'VersionNT' and
value '5.0.3': false
Result of running operator 'VersionGreaterThanOrEqualTo' on property
'VersionMsi' and value '3.0': true
Result of checks for command 'dotnetfx\WindowsInstaller-KB893803-v2-x86.exe'
is 'Bypass'
Running checks for command 'dotnetfx\dotnetfx.exe'
Result of running operator 'ValueNotEqualTo' on property 'DotNetInstalled'
and value '0': true
Result of checks for command 'dotnetfx\dotnetfx.exe' is 'Bypass'
Running checks for command 'dotnetfx\langpack.exe'
Result of running operator 'ValueEqualTo' on property 'DotNetInstalled' and
value '2': true
Result of checks for command 'dotnetfx\langpack.exe' is 'Bypass'
'.NET Framework 2.0' RunCheck result: No Install Needed
Running checks for package 'Visual C++ $B%i%s%?%$%`(B $B%i%$%V%i%j(B (x86)', phase
BuildList
Running MsiProductCheck with ProductCode
'{A49F249F-0C91-497F-86DF-B2585E8E76B7}'
MsiQueryProductState returned '-1'
Setting value '-1 {int}' for property 'VCRedistInstalled'
The following properties have been set for package 'Visual C++ $B%i%s%?%$%`(B $B%i%$%V%i%j(B (x86)':
Property: [VCRedistInstalled] = -1 {int}
Running checks for command 'vcredist_x86\vcredist_x86.exe'
Result of running operator 'ValueGreaterThanEqualTo' on property
'VCRedistInstalled' and value '3': false
Result of running operator 'ValueEqualTo' on property 'AdminUser' and value
'false': false
Skipping FailIf because Property 'Version9X' was not defined
Result of running operator 'VersionLessThan' on property 'VersionNT' and
value '5.00': false
Result of checks for command 'vcredist_x86\vcredist_x86.exe' is 'Install'
'Visual C++ $B%i%s%?%$%`(B $B%i%$%V%i%j(B (x86)' RunCheck result: Install Needed
Installation of components 'Visual C++ $B%i%s%?%$%`(B $B%i%$%V%i%j(B (x86)' was
accepted.
Copying files to temporary directory
"E:\Users\soft1\AppData\Local\Temp\VSDBA68.tmp\"
Copying from
'C:\censored\CensoredSetup\Release\vcredist_x86\vcredist_x86.exe' to
'E:\Users\soft1\AppData\Local\Temp\VSDBA68.tmp\vcredist_x86\vcredist_x86.exe'
Running checks for package 'Visual C++ $B%i%s%?%$%`(B $B%i%$%V%i%j(B (x86)', phase
BeforePackage
Running MsiProductCheck with ProductCode
'{A49F249F-0C91-497F-86DF-B2585E8E76B7}'
MsiQueryProductState returned '-1'
Setting value '-1 {int}' for property 'VCRedistInstalled'
The following properties have been set for package 'Visual C++ $B%i%s%?%$%`(B $B%i%$%V%i%j(B (x86)':
Property: [VCRedistInstalled] = -1 {int}
Running checks for command 'vcredist_x86\vcredist_x86.exe'
Result of running operator 'ValueGreaterThanEqualTo' on property
'VCRedistInstalled' and value '3': false
Result of running operator 'ValueEqualTo' on property 'AdminUser' and value
'false': false
Skipping FailIf because Property 'Version9X' was not defined
Result of running operator 'VersionLessThan' on property 'VersionNT' and
value '5.00': false
Result of checks for command 'vcredist_x86\vcredist_x86.exe' is 'Install'
'Visual C++ $B%i%s%?%$%`(B $B%i%$%V%i%j(B (x86)' RunCheck result: Install Needed
Verifying file integrity of
E:\Users\soft1\AppData\Local\Temp\VSDBA68.tmp\vcredist_x86\vcredist_x86.exe
Verifying file hash
Installing using command line
'"E:\Users\soft1\AppData\Local\Temp\VSDBA68.tmp\vcredist_x86\vcredist_x86.exe"
/q:a '
Process exited with code 0
Running checks for package 'Visual C++ $B%i%s%?%$%`(B $B%i%$%V%i%j(B (x86)', phase
AfterPackage
Running MsiProductCheck with ProductCode
'{A49F249F-0C91-497F-86DF-B2585E8E76B7}'
MsiQueryProductState returned '-1'
Setting value '-1 {int}' for property 'VCRedistInstalled'
The following properties have been set for package 'Visual C++ $B%i%s%?%$%`(B $B%i%$%V%i%j(B (x86)':
Property: [VCRedistInstalled] = -1 {int}
Running checks for command 'vcredist_x86\vcredist_x86.exe'
Result of running operator 'ValueGreaterThanEqualTo' on property
'VCRedistInstalled' and value '3': false
Result of running operator 'ValueEqualTo' on property 'AdminUser' and value
'false': false
Skipping FailIf because Property 'Version9X' was not defined
Result of running operator 'VersionLessThan' on property 'VersionNT' and
value '5.00': false
Result of checks for command 'vcredist_x86\vcredist_x86.exe' is 'Install'
'Visual C++ $B%i%s%?%$%`(B $B%i%$%V%i%j(B (x86)' RunCheck result: Unknown
Launching Application.
Using MsiInstallProduct with package path
'C:\censored\CensoredSetup\Release\LDAdjustmentSetup.msi' and command line
''
MsiInstallProduct returned '1638'
Error:
Status of package 'Visual C++ $B%i%s%?%$%`(B $B%i%$%V%i%j(B (x86)' after install is
'InstallUnknown'
 
Hi Norman,

i think the codepage you are using is japanese. Maybe you
want to switch to unicode UTF-X or western style, i mean
if this is accidentaly set.

The return code stands for the fact that your product has
been istalled twice, at least the Installer tells this. Check the
Error code with my tool if you like:
http://entwicklung.junetz.de/projects/opensource/WindowsExceptionViewer/WindowsExceptionViewer.zip


Maybe this will help:

[Windows Installer CleanUp Utility]
http://support.microsoft.com/kb/290301/en-us

You can use this tool to remove the installer database settings for the
fauty
product if you like and reinstall the runtime or whatever at your own risk!

Use it at your own risk! But it helped me several times,...


Regards

Kerem




--
 
Yes I am using Microsoft's Japanese code page. Windows comes that way, it's
the default in Outlook Express, and usually it can handle all of the
characters involved in my messages or my work.

Yes, before posting, I found what the error message is supposed to mean and
what it seems to be meaning in my case. Oddly it doesn't seem to be a
problem for VC runtime to be installed twice but the third time is the
killer.

http://entwicklung.junetz.de/projects/opensource/WindowsExceptionViewer/WindowsExceptionViewer.zip

I'm afraid I only see a C# project there. I don't see a Visual Studio Setup
project that depends on VC runtime (should I have said VC++ runtime, i.e.
CRT and ATL). I don't see any useful options that I could copy into my
project.

http://support.microsoft.com/kb/290301/en-us

"If you use this utility, you may have to reinstall other programs."

So I really hesitate to include a copy of that utility in my setup project.
I suppose the idea would be to make my installer first uninstall any
existing (or second existing copy) of VC runtime before installing it again
as this setup program does now, but that might cause trouble for the end
user. If a program's installer destroys the functioning of other programs
then the program becomes really unpopular (except for a few famous
exceptions).

Do you know how to configure a Visual Studio Setup project in Visual Studio
2005 SP1 so that it will create a more sociable MSI package?
 
There's a bug here. The issue is that the SP1 installation for the VC
runtime is (internally) a new MSI setup with a new product code, but the
package.xml that setup.exe uses is still looking for the RTM producty code.
It's mentioned here:
http://blogs.msdn.com/astebner/arch...s-are-included-in-visual-studio-2005-sp1.aspx

The MsiProductCheck guid in Product.Xml for the VS 2005 SP1 VC redist is
incorrect.
--
Phil Wilson
[MVP Windows Installer]

Norman Diamond said:
A project depends on VC runtime from Visual Studio 2005 SP1, and DotNet
Framework 2. Options are set in the setup project properties, so if these
two dependencies are not already installed then this installer will
install
them.

But what about the situation where VC runtime has already been installed?
In fact it's been installed twice. Although the project was built on a
Windows XP system with Visual Studio 2005 SP1 and the results were copied
to
a Vista system to be installed, it happens that this Vista system already
has Visual Studio 2005 SP1 plus Vista hotfix. And since a project which
requires VC runtime has already been installed on this Vista system, that
project's installer already installed a second copy of VC runtime. So
here
we are with Visual Studio 2005 SP1 building an installer which tries to
install a third copy of VC runtime, and this fails with MSI error 1638.

Due to this failure, the installer proceeds to refuse to install the
application.

For some reason the installer figures out that DotNet Framework 2 is
already
installed (one copy or two I'm not sure), so it doesn't try to install an
extra copy of that.

Since it seems that the maximum allowable number of redundant copies of
the
VC runtime from Visual Studio 2005 SP1 is two, and a third one fails, is
there some way to tell Visual Studio 2005 SP1 to build an installer which
will only try to install the VC runtime when the maximum allowable number
of
redundant copies hasn't been reached yet?

Here's the log of the installation failure.


The following properties have been set:
Property: [AdminUser] = true {boolean}
Property: [ProcessorArchitecture] = Intel {string}
Property: [VersionNT] = 6.0.0 {version}
Running checks for package '.NET Framework 2.0', phase BuildList
Running external check with command line
"E:\Users\soft1\AppData\Local\Temp\VSDBA68.tmp\dotnetfx\dotnetchk.exe" -lcid:1041
Process exited with code 2
Setting value '2 {int}' for property 'DotNetInstalled'
Reading value 'Version' of registry key 'HKLM\Software\Microsoft\Internet
Explorer'
Read string value '7.0.6000.16575'
Setting value '7.0.6000.16575 {string}' for property 'IEVersion'
The following properties have been set for package '.NET Framework 2.0':
Property: [DotNetInstalled] = 2 {int}
Property: [IEVersion] = 7.0.6000.16575 {string}
Running checks for command 'dotnetfx\instmsia.exe'
Result of running operator 'ValueExists' on property 'VersionNT': true
Result of checks for command 'dotnetfx\instmsia.exe' is 'Bypass'
Running checks for command 'dotnetfx\WindowsInstaller-KB893803-v2-x86.exe'
Result of running operator 'ValueExists' on property 'Version9x': false
Result of running operator 'VersionLessThan' on property 'VersionNT' and
value '5.0.3': false
Result of running operator 'VersionGreaterThanOrEqualTo' on property
'VersionMsi' and value '3.0': true
Result of checks for command
'dotnetfx\WindowsInstaller-KB893803-v2-x86.exe'
is 'Bypass'
Running checks for command 'dotnetfx\dotnetfx.exe'
Result of running operator 'ValueNotEqualTo' on property 'DotNetInstalled'
and value '0': true
Result of checks for command 'dotnetfx\dotnetfx.exe' is 'Bypass'
Running checks for command 'dotnetfx\langpack.exe'
Result of running operator 'ValueEqualTo' on property 'DotNetInstalled'
and
value '2': true
Result of checks for command 'dotnetfx\langpack.exe' is 'Bypass'
'.NET Framework 2.0' RunCheck result: No Install Needed
Running checks for package 'Visual C++ $B%i%s%?%$%`(B $B%i%$%V%i%j(B (x86)', phase
BuildList
Running MsiProductCheck with ProductCode
'{A49F249F-0C91-497F-86DF-B2585E8E76B7}'
MsiQueryProductState returned '-1'
Setting value '-1 {int}' for property 'VCRedistInstalled'
The following properties have been set for package 'Visual C++ $B%i%s%?%$%`(B
$B%i%$%V%i%j(B (x86)':
Property: [VCRedistInstalled] = -1 {int}
Running checks for command 'vcredist_x86\vcredist_x86.exe'
Result of running operator 'ValueGreaterThanEqualTo' on property
'VCRedistInstalled' and value '3': false
Result of running operator 'ValueEqualTo' on property 'AdminUser' and
value
'false': false
Skipping FailIf because Property 'Version9X' was not defined
Result of running operator 'VersionLessThan' on property 'VersionNT' and
value '5.00': false
Result of checks for command 'vcredist_x86\vcredist_x86.exe' is 'Install'
'Visual C++ $B%i%s%?%$%`(B $B%i%$%V%i%j(B (x86)' RunCheck result: Install Needed
Installation of components 'Visual C++ $B%i%s%?%$%`(B $B%i%$%V%i%j(B (x86)' was
accepted.
Copying files to temporary directory
"E:\Users\soft1\AppData\Local\Temp\VSDBA68.tmp\"
Copying from
'C:\censored\CensoredSetup\Release\vcredist_x86\vcredist_x86.exe' to
'E:\Users\soft1\AppData\Local\Temp\VSDBA68.tmp\vcredist_x86\vcredist_x86.exe'
Running checks for package 'Visual C++ $B%i%s%?%$%`(B $B%i%$%V%i%j(B (x86)', phase
BeforePackage
Running MsiProductCheck with ProductCode
'{A49F249F-0C91-497F-86DF-B2585E8E76B7}'
MsiQueryProductState returned '-1'
Setting value '-1 {int}' for property 'VCRedistInstalled'
The following properties have been set for package 'Visual C++ $B%i%s%?%$%`(B
$B%i%$%V%i%j(B (x86)':
Property: [VCRedistInstalled] = -1 {int}
Running checks for command 'vcredist_x86\vcredist_x86.exe'
Result of running operator 'ValueGreaterThanEqualTo' on property
'VCRedistInstalled' and value '3': false
Result of running operator 'ValueEqualTo' on property 'AdminUser' and
value
'false': false
Skipping FailIf because Property 'Version9X' was not defined
Result of running operator 'VersionLessThan' on property 'VersionNT' and
value '5.00': false
Result of checks for command 'vcredist_x86\vcredist_x86.exe' is 'Install'
'Visual C++ $B%i%s%?%$%`(B $B%i%$%V%i%j(B (x86)' RunCheck result: Install Needed
Verifying file integrity of
E:\Users\soft1\AppData\Local\Temp\VSDBA68.tmp\vcredist_x86\vcredist_x86.exe
Verifying file hash
Installing using command line
'"E:\Users\soft1\AppData\Local\Temp\VSDBA68.tmp\vcredist_x86\vcredist_x86.exe"
/q:a '
Process exited with code 0
Running checks for package 'Visual C++ $B%i%s%?%$%`(B $B%i%$%V%i%j(B (x86)', phase
AfterPackage
Running MsiProductCheck with ProductCode
'{A49F249F-0C91-497F-86DF-B2585E8E76B7}'
MsiQueryProductState returned '-1'
Setting value '-1 {int}' for property 'VCRedistInstalled'
The following properties have been set for package 'Visual C++ $B%i%s%?%$%`(B
$B%i%$%V%i%j(B (x86)':
Property: [VCRedistInstalled] = -1 {int}
Running checks for command 'vcredist_x86\vcredist_x86.exe'
Result of running operator 'ValueGreaterThanEqualTo' on property
'VCRedistInstalled' and value '3': false
Result of running operator 'ValueEqualTo' on property 'AdminUser' and
value
'false': false
Skipping FailIf because Property 'Version9X' was not defined
Result of running operator 'VersionLessThan' on property 'VersionNT' and
value '5.00': false
Result of checks for command 'vcredist_x86\vcredist_x86.exe' is 'Install'
'Visual C++ $B%i%s%?%$%`(B $B%i%$%V%i%j(B (x86)' RunCheck result: Unknown
Launching Application.
Using MsiInstallProduct with package path
'C:\censored\CensoredSetup\Release\LDAdjustmentSetup.msi' and command line
''
MsiInstallProduct returned '1638'
Error:
Status of package 'Visual C++ $B%i%s%?%$%`(B $B%i%$%V%i%j(B (x86)' after install
is
'InstallUnknown'
 
I partly understand the bug, but I don't understand what to do about it.

Aaron Stebner wrote:
"This means that if you build a setup project in VS 2005 SP1 and include the
VC redist package as a prerequisite, your setup will end up downloading and
installing the VC redist package on systems that already have the original
VS 2005 version of this redist package installed. Because of the major
upgrade functionality, this will not harm users' systems at all, but it will
result in a slight time delay due to an unnecessary download and install."

The fact is, this will not harm users' systems at all because the installer
refuses to install the third copy of the VC redist and the installer refuses
to install the application. There's wasted time, and at the end of the
wasted time there is a no-op.

Can we use Visual Studio 2005 SP1 to build an installer that will get the
application installed onto the end users' machines? If so, how?


Phil Wilson said:
There's a bug here. The issue is that the SP1 installation for the VC
runtime is (internally) a new MSI setup with a new product code, but the
package.xml that setup.exe uses is still looking for the RTM producty
code. It's mentioned here:
http://blogs.msdn.com/astebner/arch...s-are-included-in-visual-studio-2005-sp1.aspx

The MsiProductCheck guid in Product.Xml for the VS 2005 SP1 VC redist is
incorrect.
--
Phil Wilson
[MVP Windows Installer]

Norman Diamond said:
A project depends on VC runtime from Visual Studio 2005 SP1, and DotNet
Framework 2. Options are set in the setup project properties, so if
these
two dependencies are not already installed then this installer will
install
them.

But what about the situation where VC runtime has already been installed?
In fact it's been installed twice. Although the project was built on a
Windows XP system with Visual Studio 2005 SP1 and the results were copied
to
a Vista system to be installed, it happens that this Vista system already
has Visual Studio 2005 SP1 plus Vista hotfix. And since a project which
requires VC runtime has already been installed on this Vista system, that
project's installer already installed a second copy of VC runtime. So
here
we are with Visual Studio 2005 SP1 building an installer which tries to
install a third copy of VC runtime, and this fails with MSI error 1638.

Due to this failure, the installer proceeds to refuse to install the
application.

For some reason the installer figures out that DotNet Framework 2 is
already
installed (one copy or two I'm not sure), so it doesn't try to install an
extra copy of that.

Since it seems that the maximum allowable number of redundant copies of
the
VC runtime from Visual Studio 2005 SP1 is two, and a third one fails, is
there some way to tell Visual Studio 2005 SP1 to build an installer which
will only try to install the VC runtime when the maximum allowable number
of
redundant copies hasn't been reached yet?

Here's the log of the installation failure.


The following properties have been set:
Property: [AdminUser] = true {boolean}
Property: [ProcessorArchitecture] = Intel {string}
Property: [VersionNT] = 6.0.0 {version}
Running checks for package '.NET Framework 2.0', phase BuildList
Running external check with command line
"E:\Users\soft1\AppData\Local\Temp\VSDBA68.tmp\dotnetfx\dotnetchk.exe" -lcid:1041
Process exited with code 2
Setting value '2 {int}' for property 'DotNetInstalled'
Reading value 'Version' of registry key 'HKLM\Software\Microsoft\Internet
Explorer'
Read string value '7.0.6000.16575'
Setting value '7.0.6000.16575 {string}' for property 'IEVersion'
The following properties have been set for package '.NET Framework 2.0':
Property: [DotNetInstalled] = 2 {int}
Property: [IEVersion] = 7.0.6000.16575 {string}
Running checks for command 'dotnetfx\instmsia.exe'
Result of running operator 'ValueExists' on property 'VersionNT': true
Result of checks for command 'dotnetfx\instmsia.exe' is 'Bypass'
Running checks for command
'dotnetfx\WindowsInstaller-KB893803-v2-x86.exe'
Result of running operator 'ValueExists' on property 'Version9x': false
Result of running operator 'VersionLessThan' on property 'VersionNT' and
value '5.0.3': false
Result of running operator 'VersionGreaterThanOrEqualTo' on property
'VersionMsi' and value '3.0': true
Result of checks for command
'dotnetfx\WindowsInstaller-KB893803-v2-x86.exe'
is 'Bypass'
Running checks for command 'dotnetfx\dotnetfx.exe'
Result of running operator 'ValueNotEqualTo' on property
'DotNetInstalled'
and value '0': true
Result of checks for command 'dotnetfx\dotnetfx.exe' is 'Bypass'
Running checks for command 'dotnetfx\langpack.exe'
Result of running operator 'ValueEqualTo' on property 'DotNetInstalled'
and
value '2': true
Result of checks for command 'dotnetfx\langpack.exe' is 'Bypass'
'.NET Framework 2.0' RunCheck result: No Install Needed
Running checks for package 'Visual C++ $B%i%s%?%$%`(B $B%i%$%V%i%j(B (x86)',
phase
BuildList
Running MsiProductCheck with ProductCode
'{A49F249F-0C91-497F-86DF-B2585E8E76B7}'
MsiQueryProductState returned '-1'
Setting value '-1 {int}' for property 'VCRedistInstalled'
The following properties have been set for package 'Visual C++ $B%i%s%?%$%`(B
$B%i%$%V%i%j(B (x86)':
Property: [VCRedistInstalled] = -1 {int}
Running checks for command 'vcredist_x86\vcredist_x86.exe'
Result of running operator 'ValueGreaterThanEqualTo' on property
'VCRedistInstalled' and value '3': false
Result of running operator 'ValueEqualTo' on property 'AdminUser' and
value
'false': false
Skipping FailIf because Property 'Version9X' was not defined
Result of running operator 'VersionLessThan' on property 'VersionNT' and
value '5.00': false
Result of checks for command 'vcredist_x86\vcredist_x86.exe' is 'Install'
'Visual C++ $B%i%s%?%$%`(B $B%i%$%V%i%j(B (x86)' RunCheck result: Install Needed
Installation of components 'Visual C++ $B%i%s%?%$%`(B $B%i%$%V%i%j(B (x86)' was
accepted.
Copying files to temporary directory
"E:\Users\soft1\AppData\Local\Temp\VSDBA68.tmp\"
Copying from
'C:\censored\CensoredSetup\Release\vcredist_x86\vcredist_x86.exe' to
'E:\Users\soft1\AppData\Local\Temp\VSDBA68.tmp\vcredist_x86\vcredist_x86.exe'
Running checks for package 'Visual C++ $B%i%s%?%$%`(B $B%i%$%V%i%j(B (x86)',
phase
BeforePackage
Running MsiProductCheck with ProductCode
'{A49F249F-0C91-497F-86DF-B2585E8E76B7}'
MsiQueryProductState returned '-1'
Setting value '-1 {int}' for property 'VCRedistInstalled'
The following properties have been set for package 'Visual C++ $B%i%s%?%$%`(B
$B%i%$%V%i%j(B (x86)':
Property: [VCRedistInstalled] = -1 {int}
Running checks for command 'vcredist_x86\vcredist_x86.exe'
Result of running operator 'ValueGreaterThanEqualTo' on property
'VCRedistInstalled' and value '3': false
Result of running operator 'ValueEqualTo' on property 'AdminUser' and
value
'false': false
Skipping FailIf because Property 'Version9X' was not defined
Result of running operator 'VersionLessThan' on property 'VersionNT' and
value '5.00': false
Result of checks for command 'vcredist_x86\vcredist_x86.exe' is 'Install'
'Visual C++ $B%i%s%?%$%`(B $B%i%$%V%i%j(B (x86)' RunCheck result: Install Needed
Verifying file integrity of
E:\Users\soft1\AppData\Local\Temp\VSDBA68.tmp\vcredist_x86\vcredist_x86.exe
Verifying file hash
Installing using command line
'"E:\Users\soft1\AppData\Local\Temp\VSDBA68.tmp\vcredist_x86\vcredist_x86.exe"
/q:a '
Process exited with code 0
Running checks for package 'Visual C++ $B%i%s%?%$%`(B $B%i%$%V%i%j(B (x86)',
phase
AfterPackage
Running MsiProductCheck with ProductCode
'{A49F249F-0C91-497F-86DF-B2585E8E76B7}'
MsiQueryProductState returned '-1'
Setting value '-1 {int}' for property 'VCRedistInstalled'
The following properties have been set for package 'Visual C++ $B%i%s%?%$%`(B
$B%i%$%V%i%j(B (x86)':
Property: [VCRedistInstalled] = -1 {int}
Running checks for command 'vcredist_x86\vcredist_x86.exe'
Result of running operator 'ValueGreaterThanEqualTo' on property
'VCRedistInstalled' and value '3': false
Result of running operator 'ValueEqualTo' on property 'AdminUser' and
value
'false': false
Skipping FailIf because Property 'Version9X' was not defined
Result of running operator 'VersionLessThan' on property 'VersionNT' and
value '5.00': false
Result of checks for command 'vcredist_x86\vcredist_x86.exe' is 'Install'
'Visual C++ $B%i%s%?%$%`(B $B%i%$%V%i%j(B (x86)' RunCheck result: Unknown
Launching Application.
Using MsiInstallProduct with package path
'C:\censored\CensoredSetup\Release\LDAdjustmentSetup.msi' and command
line
''
MsiInstallProduct returned '1638'
Error:
Status of package 'Visual C++ $B%i%s%?%$%`(B $B%i%$%V%i%j(B (x86)' after install
is
'InstallUnknown'
 
Norman Diamond said:
I partly understand the bug, but I don't understand what to do about it.

Aaron Stebner wrote:
"This means that if you build a setup project in VS 2005 SP1 and include
the VC redist package as a prerequisite, your setup will end up
downloading and installing the VC redist package on systems that already
have the original VS 2005 version of this redist package installed.
Because of the major upgrade functionality, this will not harm users'
systems at all, but it will result in a slight time delay due to an
unnecessary download and install."

The fact is, this will not harm users' systems at all because the
installer refuses to install the third copy of the VC redist and the
installer refuses to install the application. There's wasted time, and at
the end of the wasted time there is a no-op.

Can we use Visual Studio 2005 SP1 to build an installer that will get the
application installed onto the end users' machines? If so, how?

Check out the follow up here:
<http://blogs.msdn.com/nikolad/archi...edist-exe-within-a-boostrapper-setup-exe.aspx>

Anthony Wieser
Wieser Software Ltd
 
Anthony Wieser said:

OK, Nikola Dudar wrote:
"When it is used as part of bootstrapper (setup.exe), RTM version of
VCRedist.EXE may be downloaded instead of SP1 version because of incorrect
product code specified in product.xml."

I'm still confused, for two more new reasons now.

(1) Visual Studio 2005 SP1 creates an installer that includes the SP1
version of VCRedist.EXE not the RTM version. If only a second installation
of the SP1 version occurs then it wastes time but succeeds. The problem is
that a third installation of the SP1 version fails, therefore the installer
refuses to install the application. I don't see where the RTM version
enters into this.

(2) I understand wording about some file named product.xml containing a
product code that improperly specified the RTM version. I understand that
if I can find a file named product.xml and correct its contents then maybe
both the second (succeeding) and third (failing) attempts to install the SP1
version will no longer be attempted, and the application might install
directly. However, where is this product.xml file?
 
The bug described by Aaron Stebner continues unchanged in Visual Studio
2008. The installer wastes time installing a second copy of VC 2008
runtime.

For the problem that I experienced, where the installer attempts to install
a third copy of VC 2005 SP1 runtime, fails, and then refuses to install the
application, I'm not sure yet if this is fixed in Visual Studio 2008. It
sure looks like a tougher problem than the one Mr. Stebner described.


Phil Wilson said:
There's a bug here. The issue is that the SP1 installation for the VC
runtime is (internally) a new MSI setup with a new product code, but the
package.xml that setup.exe uses is still looking for the RTM producty
code. It's mentioned here:
http://blogs.msdn.com/astebner/arch...s-are-included-in-visual-studio-2005-sp1.aspx

The MsiProductCheck guid in Product.Xml for the VS 2005 SP1 VC redist is
incorrect.
--
Phil Wilson
[MVP Windows Installer]

Norman Diamond said:
A project depends on VC runtime from Visual Studio 2005 SP1, and DotNet
Framework 2. Options are set in the setup project properties, so if
these
two dependencies are not already installed then this installer will
install
them.

But what about the situation where VC runtime has already been installed?
In fact it's been installed twice. Although the project was built on a
Windows XP system with Visual Studio 2005 SP1 and the results were copied
to
a Vista system to be installed, it happens that this Vista system already
has Visual Studio 2005 SP1 plus Vista hotfix. And since a project which
requires VC runtime has already been installed on this Vista system, that
project's installer already installed a second copy of VC runtime. So
here
we are with Visual Studio 2005 SP1 building an installer which tries to
install a third copy of VC runtime, and this fails with MSI error 1638.

Due to this failure, the installer proceeds to refuse to install the
application.

For some reason the installer figures out that DotNet Framework 2 is
already
installed (one copy or two I'm not sure), so it doesn't try to install an
extra copy of that.

Since it seems that the maximum allowable number of redundant copies of
the
VC runtime from Visual Studio 2005 SP1 is two, and a third one fails, is
there some way to tell Visual Studio 2005 SP1 to build an installer which
will only try to install the VC runtime when the maximum allowable number
of
redundant copies hasn't been reached yet?

Here's the log of the installation failure.


The following properties have been set:
Property: [AdminUser] = true {boolean}
Property: [ProcessorArchitecture] = Intel {string}
Property: [VersionNT] = 6.0.0 {version}
Running checks for package '.NET Framework 2.0', phase BuildList
Running external check with command line
"E:\Users\soft1\AppData\Local\Temp\VSDBA68.tmp\dotnetfx\dotnetchk.exe" -lcid:1041
Process exited with code 2
Setting value '2 {int}' for property 'DotNetInstalled'
Reading value 'Version' of registry key 'HKLM\Software\Microsoft\Internet
Explorer'
Read string value '7.0.6000.16575'
Setting value '7.0.6000.16575 {string}' for property 'IEVersion'
The following properties have been set for package '.NET Framework 2.0':
Property: [DotNetInstalled] = 2 {int}
Property: [IEVersion] = 7.0.6000.16575 {string}
Running checks for command 'dotnetfx\instmsia.exe'
Result of running operator 'ValueExists' on property 'VersionNT': true
Result of checks for command 'dotnetfx\instmsia.exe' is 'Bypass'
Running checks for command
'dotnetfx\WindowsInstaller-KB893803-v2-x86.exe'
Result of running operator 'ValueExists' on property 'Version9x': false
Result of running operator 'VersionLessThan' on property 'VersionNT' and
value '5.0.3': false
Result of running operator 'VersionGreaterThanOrEqualTo' on property
'VersionMsi' and value '3.0': true
Result of checks for command
'dotnetfx\WindowsInstaller-KB893803-v2-x86.exe'
is 'Bypass'
Running checks for command 'dotnetfx\dotnetfx.exe'
Result of running operator 'ValueNotEqualTo' on property
'DotNetInstalled'
and value '0': true
Result of checks for command 'dotnetfx\dotnetfx.exe' is 'Bypass'
Running checks for command 'dotnetfx\langpack.exe'
Result of running operator 'ValueEqualTo' on property 'DotNetInstalled'
and
value '2': true
Result of checks for command 'dotnetfx\langpack.exe' is 'Bypass'
'.NET Framework 2.0' RunCheck result: No Install Needed
Running checks for package 'Visual C++ $B%i%s%?%$%`(B $B%i%$%V%i%j(B (x86)',
phase
BuildList
Running MsiProductCheck with ProductCode
'{A49F249F-0C91-497F-86DF-B2585E8E76B7}'
MsiQueryProductState returned '-1'
Setting value '-1 {int}' for property 'VCRedistInstalled'
The following properties have been set for package 'Visual C++ $B%i%s%?%$%`(B
$B%i%$%V%i%j(B (x86)':
Property: [VCRedistInstalled] = -1 {int}
Running checks for command 'vcredist_x86\vcredist_x86.exe'
Result of running operator 'ValueGreaterThanEqualTo' on property
'VCRedistInstalled' and value '3': false
Result of running operator 'ValueEqualTo' on property 'AdminUser' and
value
'false': false
Skipping FailIf because Property 'Version9X' was not defined
Result of running operator 'VersionLessThan' on property 'VersionNT' and
value '5.00': false
Result of checks for command 'vcredist_x86\vcredist_x86.exe' is 'Install'
'Visual C++ $B%i%s%?%$%`(B $B%i%$%V%i%j(B (x86)' RunCheck result: Install Needed
Installation of components 'Visual C++ $B%i%s%?%$%`(B $B%i%$%V%i%j(B (x86)' was
accepted.
Copying files to temporary directory
"E:\Users\soft1\AppData\Local\Temp\VSDBA68.tmp\"
Copying from
'C:\censored\CensoredSetup\Release\vcredist_x86\vcredist_x86.exe' to
'E:\Users\soft1\AppData\Local\Temp\VSDBA68.tmp\vcredist_x86\vcredist_x86.exe'
Running checks for package 'Visual C++ $B%i%s%?%$%`(B $B%i%$%V%i%j(B (x86)',
phase
BeforePackage
Running MsiProductCheck with ProductCode
'{A49F249F-0C91-497F-86DF-B2585E8E76B7}'
MsiQueryProductState returned '-1'
Setting value '-1 {int}' for property 'VCRedistInstalled'
The following properties have been set for package 'Visual C++ $B%i%s%?%$%`(B
$B%i%$%V%i%j(B (x86)':
Property: [VCRedistInstalled] = -1 {int}
Running checks for command 'vcredist_x86\vcredist_x86.exe'
Result of running operator 'ValueGreaterThanEqualTo' on property
'VCRedistInstalled' and value '3': false
Result of running operator 'ValueEqualTo' on property 'AdminUser' and
value
'false': false
Skipping FailIf because Property 'Version9X' was not defined
Result of running operator 'VersionLessThan' on property 'VersionNT' and
value '5.00': false
Result of checks for command 'vcredist_x86\vcredist_x86.exe' is 'Install'
'Visual C++ $B%i%s%?%$%`(B $B%i%$%V%i%j(B (x86)' RunCheck result: Install Needed
Verifying file integrity of
E:\Users\soft1\AppData\Local\Temp\VSDBA68.tmp\vcredist_x86\vcredist_x86.exe
Verifying file hash
Installing using command line
'"E:\Users\soft1\AppData\Local\Temp\VSDBA68.tmp\vcredist_x86\vcredist_x86.exe"
/q:a '
Process exited with code 0
Running checks for package 'Visual C++ $B%i%s%?%$%`(B $B%i%$%V%i%j(B (x86)',
phase
AfterPackage
Running MsiProductCheck with ProductCode
'{A49F249F-0C91-497F-86DF-B2585E8E76B7}'
MsiQueryProductState returned '-1'
Setting value '-1 {int}' for property 'VCRedistInstalled'
The following properties have been set for package 'Visual C++ $B%i%s%?%$%`(B
$B%i%$%V%i%j(B (x86)':
Property: [VCRedistInstalled] = -1 {int}
Running checks for command 'vcredist_x86\vcredist_x86.exe'
Result of running operator 'ValueGreaterThanEqualTo' on property
'VCRedistInstalled' and value '3': false
Result of running operator 'ValueEqualTo' on property 'AdminUser' and
value
'false': false
Skipping FailIf because Property 'Version9X' was not defined
Result of running operator 'VersionLessThan' on property 'VersionNT' and
value '5.00': false
Result of checks for command 'vcredist_x86\vcredist_x86.exe' is 'Install'
'Visual C++ $B%i%s%?%$%`(B $B%i%$%V%i%j(B (x86)' RunCheck result: Unknown
Launching Application.
Using MsiInstallProduct with package path
'C:\censored\CensoredSetup\Release\LDAdjustmentSetup.msi' and command
line
''
MsiInstallProduct returned '1638'
Error:
Status of package 'Visual C++ $B%i%s%?%$%`(B $B%i%$%V%i%j(B (x86)' after install
is
'InstallUnknown'
 
Back
Top