views:

674

answers:

2

I have a method that loads a Crystal Reports file, sets the appropriate login information, and then generates a PDF.

ReportDocument rep = new ReportDocument();
rep.Load(...);

// Set table LogOnInfo

rep.ExportToStream(ExportFormatType.PortableDocFormat);

// Save the PDF to disk or return it as web request

This exact code works in both

  1. A stand-alone WPF desktop application
  2. An ASP.NET MVC website running through Cassini launched from VS

but does not work when the same website is deployed to IIS7. It gives a rather unhelpful message and stacktrace.

An error has occurred while attempting to load the Crystal Reports runtime.

Either the Crystal Reports registry key permissions are insufficient or the Crystal Reports runtime is not installed correctly.

Please install the appropriate Crystal Reports redistributable (CRRedist*.msi) that contains the version of the Crystal Reports runtime (x86, x64, or Itanium) that is required. Please go to http://www.businessobjects.com/support for more information.

Exception Details: CrystalDecisions.CrystalReports.Engine.LoadSaveReportException: An error has occurred while attempting to load the Crystal Reports runtime.

Note that I am using CR 2008 SP2 and the files haven't been named CRRedist... since 10.5 so someone has been forgetting to update the messages somewhere :) Here is a list of all the CR runtimes.

So why would running the same code referencing the same assemblies work in the two situations listed above but not in a deployed website?

I found this suggestion to give the IIS user write access to the temp folder, and it does appear that the Crystal runtime does some work there but I still get the same error even after giving IIS_IUSR or IIS AppPool\DefaultAppPool full access to %TEMP%.

I have also tried changing the app pool to use my account as the identity and still receive the same error message so I'm not convinced it's a permissions issue.

+1  A: 

It turns out that for any newer versions of Crystal Reports after 10.5 (the one that is bundled with VS2008) there are no 64-bit runtimes.

The "simple" solution is to make the app pool 32-bit and then everything works ok.

There are more explanations found here (along with the expected angry responses)

Jedidja
A: 

i love you, i seriously do.

mgee
Glad you found this useful :) I spent a lot of time tearing my hair out over this.
Jedidja