cancel
Showing results for 
Search instead for 
Did you mean: 

CRRuntime_12_0_mlb.msi always installs

Former Member
0 Kudos

I created a VS 2005 "Setup and Deployment" package and as a prerequisite I included "Crystal Reports 2008" (i.e. CRRuntime_12_0_mlb.msi).

Each time I run the install it installs "Crystal Reports 2008"

The log files always shows "'Crystal Reports 2008' RunCheck result: Install Needed"

For XP this doesn't seem seem be a show-stopper - but for Vista this results in an error

Install Log

===============

Running checks for package 'Crystal Reports for .NET Framework 2.0', phase BuildList

Reading value 'BuildNum' of registry key 'HKLM\SOFTWARE\Crystal Decisions\10.2\Crystal Reports'

Read string value '570'

Setting value '570 ' for property 'CRBuildNum'+ The following properties have been set for package 'Crystal Reports for .NET Framework 2.0': +Property: [CRBuildNum] = 570

Running checks for command 'CrystalReports\CRRedist2005_x86.msi'

Result of running operator 'ValueEqualTo' on property 'CRBuildNum' and value '570': true

Result of checks for command 'CrystalReports\CRRedist2005_x86.msi' is 'Bypass'

'Crystal Reports for .NET Framework 2.0' RunCheck result: No Install Needed

Running checks for package 'Crystal Reports 2008', phase BuildList

Reading value 'BuildNum' of registry key 'HKLM\SOFTWARE\Business Objects\Suite 12.0\Crystal Reports'

Read string value ''

Setting value ' ' for property 'CRBuildNum'+ The following properties have been set for package 'Crystal Reports 2008': +Property: [CRBuildNum] =

Running checks for command 'CrystalReports 12.0\CRRuntime_12_0_mlb.msi'

Result of running operator 'ValueEqualTo' on property 'CRBuildNum' and value '200': 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 'CrystalReports 12.0\CRRuntime_12_0_mlb.msi' is 'Install'

'Crystal Reports 2008' RunCheck result: Install Needed

EULA for components 'Crystal Reports 2008' was accepted.

Copying files to temporary directory "C:\Users\tlguser\AppData\Local\Temp\VSD4BD9.tmp\"

Copying from 'D:\CrystalReports 12.0\CRRuntime_12_0_mlb.msi' to 'C:\Users\tlguser\AppData\Local\Temp\VSD4BD9.tmp\CrystalReports 12.0\CRRuntime_12_0_mlb.msi'

Running checks for package 'Crystal Reports 2008', phase BeforePackage

Reading value 'BuildNum' of registry key 'HKLM\SOFTWARE\Business Objects\Suite 12.0\Crystal Reports'

Read string value ''

Setting value ' ' for property 'CRBuildNum'+ The following properties have been set for package 'Crystal Reports 2008': +Property: [CRBuildNum] =

Running checks for command 'CrystalReports 12.0\CRRuntime_12_0_mlb.msi'

Result of running operator 'ValueEqualTo' on property 'CRBuildNum' and value '200': 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 'CrystalReports 12.0\CRRuntime_12_0_mlb.msi' is 'Install'

'Crystal Reports 2008' RunCheck result: Install Needed

Verifying file integrity of C:\Users\tlguser\AppData\Local\Temp\VSD4BD9.tmp\CrystalReports 12.0\CRRuntime_12_0_mlb.msi

WinVerifyTrust returned 0

File trusted

Installing using command line '"C:\Windows\system32\msiexec.exe" -I "C:\Users\tlguser\AppData\Local\Temp\VSD4BD9.tmp\CrystalReports 12.0\CRRuntime_12_0_mlb.msi" -q '

Process exited with code 0

Running checks for package 'Crystal Reports 2008', phase AfterPackage

Reading value 'BuildNum' of registry key 'HKLM\SOFTWARE\Business Objects\Suite 12.0\Crystal Reports'

Read string value ''

Setting value ' ' for property 'CRBuildNum'+ The following properties have been set for package 'Crystal Reports 2008': +Property: [CRBuildNum] =

Running checks for command 'CrystalReports 12.0\CRRuntime_12_0_mlb.msi'

Result of running operator 'ValueEqualTo' on property 'CRBuildNum' and value '200': 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 'CrystalReports 12.0\CRRuntime_12_0_mlb.msi' is 'Install'

'Crystal Reports 2008' RunCheck result: Unknown

Launching Application.

Using MsiInstallProduct with package path 'D:\Setup.msi' and command line ''

MsiInstallProduct returned '1638'

Error:

Status of package 'Crystal Reports 2008' after install is 'InstallUnknown'

Accepted Solutions (1)

Accepted Solutions (1)

Former Member
0 Kudos

Removed note, not valid:

But perhaps I missed some point in the other thread (it did go into DLL hell and related dark corners of the non .NET world)

Edited by: al smyth on Sep 16, 2008 8:58 PM

Edited by: Don Williams on Sep 16, 2008 1:31 PM

0 Kudos

Removed note details: not valid

Edited by: Don Williams on Sep 16, 2008 1:32 PM

Answers (5)

Answers (5)

Former Member
0 Kudos

I figured out the problem and I have a workaround solution

SCENARIO

Include the ClickOnce CR 08 Runtime (CRRuntime_12_0_mlb.msi) in a Visual Studio setup/deployment by choosing it as prerequisite.

Run the resulting setup on a PC that already has CR 08 Runtime (but NOT full CR)

RESULT

The setup will always try to install CR 08 Runtime. For a Vista system this can be a critical error.

DIAGNOSE

What I found is that consistently the install log would show

Running checks for package 'Crystal Reports 2008', phase BuildList

Reading value 'BuildNum' of registry key 'HKLM\SOFTWARE\Business Objects\Suite 12.0\Crystal Reports'

Read string value ''

Setting value ' ' for property 'CRBuildNum'+ The following properties have been set for package 'Crystal Reports 2008': +Property: [CRBuildNum] =

Running checks for command 'CrystalReports 12.0\CRRuntime_12_0_mlb.msi'

Result of running operator 'ValueEqualTo' on property 'CRBuildNum' and value '200': 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 'CrystalReports 12.0\CRRuntime_12_0_mlb.msi' is 'Install'

'Crystal Reports 2008' RunCheck result: Install Needed

What this means is that based on the logic stated n the related manifest (product.xml) the setup is asked to

a) Read the contents of HKLM\SOFTWARE\Business Objects\Suite 12.0\Crystal Reports'\BuildNum

b) Store the results in a local variable CRBuildNum

c) Compare CRBuildNum to 200. If CRBuildNum <> 200, then RunCheck result: Install Needed

The problem is for CR 08 Runtime, there is no

HKLM\SOFTWARE\Business Objects\Suite 12.0\Crystal Reports'\BuildNum

As Don pointed out, and I verified, this registry value does exist in the full development version, but not if just the CR 08 Runtime is installed.

Is that a bug in the CR 08 Runtime ? Perhaps.

SOLUTION

The solution is to simply modify the associated manifest product.xml

Which is usually in a folder such as

C:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\BootStrapper\Packages\CrystalReports 12.0

1) Change the InstallChecks section

<InstallChecks>

<RegistryCheck Property="CRBuildNum" Key="HKLM\SOFTWARE\Business Objects\Suite 12.0\Crystal Reports" Value="BuildNum" />

</InstallChecks>

The problem here is that if just CR Runtime 08 is installed there is no

HKLM\SOFTWARE\Business Objects\Suite 12.0\Crystal Reports\BuildNum

At least not on the machines I tested against (Vista, and an XP)

Changed to look for a registry key that DOES exist (for both development or runtime install)

<InstallChecks>

<RegistryCheck Property="SomeValue" Key="HKLM\SOFTWARE\Business Objects\Suite 12.0\Crystal Reports" Value="CommonFiles" />

</InstallChecks>

NOTE: I changed not only the registry value that it looks for, but the name of local variable where the result is stored (i.e. now the variable name SomeValue is more appropriate than CRBuildNum)

2) Change the InstallConditions check

<BypassIf Property="CRBuildNum" Compare="ValueEqualTo" Value="200"/>

The problem is CRBuildNum would ALWAYS be "" (again on PCs that have just CR 08 Runtime installed).

Changed to consider the value of another registry key that should exist if either full CR 08, or CR 08 Runtime is installed

<BypassIf Property="SomeValue" Compare="ValueNotEqualTo" Value=""/>

So now, the manifest is saying "If the key exists and has any value, then we'll assume CR 08 exists"

DOWNSIDE TO SOLUTION

The downside is that, although this works by avoiding constant reinstall of CR 08, it does not know the version. So if there is an upgrade to CR 08 Runtime, this logic would not allow it to install.

The only true solution is to know where in the registry the version is stored (if it is... i.e. perhaps there is a bug in the CR 08 Runtime in that it doesn't put BuildNum and version in the registry).

But until then, this will work.

OPEN ISSUES

So although I have a workaround the issue still stands and can be restated as:

For a PC that has ONLY CR 08 Runtime

  • Does CRRuntime_12_0_mlb.msi place a version number in the registry ?

  • If so, then where ?

  • Is it named BuildNum ?

  • If not, then is this a bug ?

  • Is the product.xml manifest wrong ?

Former Member
0 Kudos

Hey Don thanks for the reply

a) "Can I ask why you are installing multiple times without doing an un-install first?"

=====================================

Sure. As I stated, I have a VS solution that uses reports built in CR 08.

Thus, I built a VS Setup which has a prerequisite of CR 08 Runtime.

There are several instances where the subsequent install could be run multiple times

Also, I fear what is going to happen when I build other apps (and setup routines) that use CR 08.

More important to your question, if you uninstall my app, it doesn't uninstall the associated prerequisites (for example, uninstall of foobar.exe doesn't uninstall .NET 2.0).

I have had the desperate thought of building my own "test if CR 08 Runtime is installed" logic - but that seems like a sloppy and unnessary workaround to such a professional product such as CR.

b) "Also my registry key is there but it's empty."

===================================

Really? Ah, but I think then that your registry key got there via a different msi or install.

For example, on my development PC where I have full CR 08, yes, I have that key as well.

So again, this is an "AH-HA!!" clue. PCs that have the full version of CR 08 have the key that the product.xml tells the setup to look for but PCs that have CR runtime do not.

So my questions and observations still stand:

i. Has anyone installed CR runtime in a setup project and not had it attempt to reinstall on subsequent runs ?

ii. Can someone verify the product.xml

<InstallChecks>

<RegistryCheck Property="CRBuildNum" Key="HKLM\SOFTWARE\Business Objects\Suite 12.0\Crystal Reports" Value="BuildNum" />

</InstallChecks>

0 Kudos

Hi Al,

The best would be to test if CR has already been installed. Our installer does the same thing, we look for older versions. Our MSI also checks versions so it will not install an older version over top of a newer version of our dll's.

Using a Custom Function and check the registry key, if it exists then don't install.

I don't believe this would not be considered messy, just a requirement for distribution.

Thanks again

Don

Former Member
0 Kudos

As always thanks again for the feedback!!!

Parsing it out...

"The best would be to test if CR has already been installed."

RE: Yes, and in fact that is what the CRRuntime_12_0_mlb.msi attempts to do - but it does not succeed. My guess is the product.xml or related logic is wrong (incorrect or buggy).

"Our installer does the same thing, we look for older versions."

RE: You look for older versions of CR Runtime? Specific to CR Runtime (and especially CR 2008) how?

Also, note that I am not building the install using an installer software such as InstallShield, I am using VS 2005 Setup and Deploy package. Also I am not building a single msi (such as using CR 08 Runtime merge module), instead I am including or referencing the CR 08 Runtime msi.

"Using a Custom Function and check the registry key, if it exists then don't install."

RE: Again, this logic is supposed to already be available via including CRRuntime_12_0_mlb.msi in the VS setup and deploy package. But regardless, let's say I too was to do this - what registry key do you look for?

"I don't believe this would not be considered messy, just a requirement for distribution."

RE: The messy part is that as a developer I am forced to reinvent the wheel - and as where other msi that I include with my setup, they check themselves and install properly without having to write custom logic, the CR 08 Runtime does not. Using your reasoning, since .NET 2.0 is a prerequsist, then I should also build custom function to check and see if .NET 2.0 is installed. But, alas, I do not need to build such a custom function because the msi and associated logic for .NET 2.0 works fine (whereas the CR 08 runtime does not).

The basic principle of any good developer is modular reusable logic. Also since we paid so much for the privilege to use such professional software I would assume the company that provides the solutions would want to know if the solutions they provide work or not.

And a final messy gotcha is that if I have to inject my own logic, then I am forced to make assumptions that I do not know are true or not - and you know what happens when you assume....

Note also, that last time you asked "why are you installing more than once?". In fact, I could be installing the first time, but another product has installed CR 08 Runtime - in my situation that would cause a problem. So it is not just my product installing multiple times but just in general the fact that the CR 08 Runetime needs to be aware if it needs to install or not.

So, again, my analysis is that the solution that Business Objects has provided for including CR 08 Runtime with a VS Setup and Deployment package has a bug or flaw in it. And I suspect it is the Product.xml (i.e bootstrapping related logic).

I am going to try tweaking the Product.xml so it looks for a different registry key (instead of the one that is associated withthe full development version of CR). I will post the results.

Beyond that it would be great if either

a) someone could prove me wrong (i.e. a situation where CRRuntime_12_0_mlb.msi was included as prerequsiste in a VS setup deployment and it successfully checked that CR 08 Runtime was already installed).

OR

b) someone could provide a fix the native solution (i.e. such as tweak the product.xml. Again, I don't want to reinvent the logic that is already there - I just want to get it working).

Former Member
0 Kudos

Yea man, the more I look at the problem ... I suspect the

<InstallChecks>

<RegistryCheck Property="CRBuildNum" Key="HKLM\SOFTWARE\Business Objects\Suite 12.0\Crystal Reports" Value="BuildNum" />

</InstallChecks>

Can someone verify?

0 Kudos

Hi Al,

Has anyone been able to run the install CR 08 Runtime as part of a VS setup project multiple times and have it recognize that it already exists?

Can I ask why you are installing multiple times without doing an un-install first?

Also my registry key is there but it's empty.

Thanks

Don

Former Member
0 Kudos

Yea, I found that in my google search as well - and I'm not sure it applies. It is slightly different and it is for a different msi (the CR .NET) install

HERE ARE SOME MORE NOTES AND I THINK I'M GETTING CLOSER

I do notice that in the log when the CR 08 runtime does install is

Running checks for package 'Crystal Reports 2008', phase BuildList

Reading value 'BuildNum' of registry key 'HKLM\SOFTWARE\Business Objects\Suite 12.0\Crystal Reports'

Unable to read registry value

Not setting value for property 'CRBuildNum'

The following properties have been set for package 'Crystal Reports 2008':

Running checks for command 'CrystalReports 12.0\CRRuntime_12_0_mlb.msi'

Skipping ByPassIf because Property 'CRBuildNum' was not defined

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 'CrystalReports 12.0\CRRuntime_12_0_mlb.msi' is 'Install'

'Crystal Reports 2008' RunCheck result: Install Needed

EULA for components 'Crystal Reports 2008' was accepted.

further down it says

Reading value 'BuildNum' of registry key 'HKLM\SOFTWARE\Business Objects\Suite 12.0\Crystal Reports'

Unable to read registry value

Not setting value for property 'CRBuildNum'

Interesting observations....

1) Notice how it says 'BuildNum' and then it says 'CRBuildNum'

That seems odd to me

2) The Unable to read registry value followed by Not setting value for property 'CRBuildNum'

Could it be it is unable to read because it doesn't exist?

And then Not setting value for property 'CRBuildNum' - why not?

And here's a kicker....

If I run the CRRuntime_12_0_mlb.exe it recognizes that CR Runtime 08 is already installed.

AND I verified in that case there is no

'HKLM\SOFTWARE\Business Objects\Suite 12.0\Crystal\BuildNum or

'HKLM\SOFTWARE\Business Objects\Suite 12.0\Crystal \CRBuildNum

So I don't think it is a MS or registry releated problem - I think it is a problem with CRRuntime_12_0_mlb.msi running as part of a setup package build in VS (i.e. bootstrap)

Which I think means it may have to do with the related product.xml?

Perhaps the entry

<InstallChecks>

<RegistryCheck Property="CRBuildNum" Key="HKLM\SOFTWARE\Business Objects\Suite 12.0\Crystal Reports" Value="BuildNum" />

</InstallChecks>

And again, note that CRRuntime_12_0_mlb.exe doesn't create such an entry - and yet it "knows" if CR 08 Runtime is installed.

Has anyone been able to run the install CR 08 Runtime as part of a VS setup project multiple times and have it recognize that it already exists?

Edited by: al smyth on Sep 16, 2008 11:48 PM

Former Member
0 Kudos

Thanks again - speedy post!!!

But, I'm still scratchin' my head a bit.

Let me put it this way - ignoring Vista, because I also have a problem on XP and that is

"How can I stop CR 2008 runtime from always installing?"

Certainly the first time my install runs on a clean machine - but then each time after the install should notice CR 08 runtime already exists and not install it again (it installs fine the first time and I can even manually uninstall it).

i.e. How can I prevent, as log file shows, 'Crystal Reports 2008' RunCheck result: Install Needed" ?

Are you saying

  • that on XP and Vista - if the mentioned DLLs do not exist then even if CR Runtime installs okay, it will not "do something" that will allow it to see that it is already installed ?

Or put another way - are you saying...

  • the msi will install CR just fine and CR will run just fine, but the msi relies on the dlls mentioned to check and see if install is needed ?

0 Kudos

Hi Al,

The problem you are running into is due to the registry setting indicating it requires a re-install is not getting updated.

There are various microsoft articles and other post as to why and how to fix, it's not a CR issue:

I did a google search and found this one:

http://social.msdn.microsoft.com/forums/en-US/vscrystalreports/thread/672c79de-9c96-49a2-883a-d99a8c...

Thanks

Don

PS - I am going to remove the other info so not to confuse the issue.