Article PS080519170

Usage under a 64-bit Server Environment

Problem Description

This article discusses the use of the Persits components in a 64-bit
server environment.

Solution

Introduction

Persits Software, Inc. offers all of its COM components as both 32-bit and 64-bit libraries.
Functionality-wise, the 64-bit versions are identical to their
32-bit counterparts but can be used with IIS running in the native 64-bit mode.

The names for the 64-bit component DLLs are formed by adding "64" to the end of the filename.
For example, the 64-bit AspUpload resides in the DLL aspupload64.dll.

The 64-bit setups are named the same way, e.g. the AspUpload installer's filename is aspupload64.exe.

With the exception of AspPDF, the 64-bit versions of the components are licensed as if
there were separate products. The registration keys purchased for the 32-bit versions do not
work with their 64-bit counterparts, or vice versa.

The 32-bit and 64-bit Modes of IIS

For a Persits component to work properly on your 64-bit Windows server, the component's "bitness"
(i.e. 32-bit or 64-bit) must match that of your IIS.

On a 64-bit Windows server, IIS can be run in its native 64-bit mode or 32-bit compatibility mode.

On Windows 2003, the entire IIS can be configured to run in one mode or the other, but not both.

On Windows 2008, Vista, and 7, some virtual directories can be configured to run in the 32-bit mode, and others
in the 64-bit mode. See below for details on how to configure your system to run in a particular mode.

What if there is a bitness mismatch?

If a 32-bit component is used with IIS running in the 64-bit mode, or vice versa,
an error will occur. In classic ASP, the Server.CreateObject line will generate the error message

Note that due to Microsoft's penchant for ambiguity in error reporting, this error does not
necessarily mean a bitness mismatch. It can also mean a lack of NTFS permissions on the component
DLL (which is a totally different problem covered
here.)

In .NET, an error may be even more vague, but will almost certainly be coming from the line
where the instance of the object is being created.

To fix the bitness-mismatch error, you need to match up the bitnesses of the
involved parties (IIS and the component.)

IIS running in a 32-bit compatibility mode

If the IIS you have to work with is run in a 32-bit compatibility mode, you have to
use the 32-bit versions of the components. There is one caveat: the 32-bit registration key
now needs to be placed in a different area of the system registry and you have to do it manually,
as our setup applications won't do it for you.

In this case, you need to install the 64-bit version of the component. The easiest way is to run
its 64-bit installer (such as aspupload64.exe) which takes care of registering the
DLL and installing the key, if you already own one.

The registration key goes under its regular location (the same as a 32-bit key on a 32-bit system):

HKEY_LOCAL_MACHINE\SOFTWARE\Persits Software\<product>\RegKey

The key itself is different, though. All 64-bit keys are 76-characters long and look something like this:

With the exception of AspPDF, you have to purchase a 64-bit key anew even if you already own a 32-bit key.
If you are unable or unwilling to purchase the 64-bit license, you still have the option
of switching IIS to the 32-bit mode and reusing your existing 32-bit registration key.

An attempt to run the 64-bit version of a component with a 32-bit key will result in the following error:

Invalid key length. Should be 76 characters.

Windows 2008, Vista and 7

Windows 2008/Vista/7 allows some virtual directories to
run in the 32-bit mode, and others in the 64-bit mode. A virtual directory is configured to run in the
32-bit mode by configuring its Application Pool to enable 32-bit application, as shown below.

Therefore, you can run the 32-bit and 64-bit versions of the Persits components side by side on Windows 2008/Vista/7.
You still need separate 32-bit and 64-bit keys for all the products except AspPDF,
and the key locations in the system registry are as described above.

Windows 2003

To enable the 32-bit mode, the following command needs to be executed: