In this topic
The licensing and deployment models for custom applications must be considered before application development begins, alongside the functional requirements of the application, because a number of end user software and license configurations are possible.
Licensing concepts
After you've determined which licensing options your application requires and which ones it will be able to run against, you must make sure that your application initializes those licenses correctly. This section describes the license initialization process, illustrates how a multiple license initialization would work, and provides a number of sample initialization processes.
Key concepts
-
License initialization must be performed by the application, at application start time, before any ArcObjects components are accessed.
-
Once an application has been initialized with a license, it cannot be reinitialized; an application is initialized with a license for the duration of its execution.
-
The extension licenses available to an application come from the same license server as the license used to initialize the application; extension licenses on different license servers are not available to the application.
A license server is defined as the machine providing the license.
-
Extension licenses can be either checked out for the duration of the application's life or can be checked out and checked in when required by the application.
-
Always attempt to consume the lowest level license.
Each standalone application developed using ArcObjects must initialize itself with a suitable ArcGIS license to ensure it runs successfully on any machine to which it is deployed. The license initialization must be performed by the application, at application start time, before any ArcObjects components are accessed. Failure to initialize will result in application errors.
While every standalone application must be initialized, the following examples illustrate situations that do not qualify as standalone and, therefore, don't need to be initialized as described:
-
The application is a DLL that will be incorporated into an application that will itself perform the license configuration.
-
The application is an extension to ArcMap or another third-party application. The extension is responsible for license management.
There are two types of licenses to consider when initializing an application: product licenses and, if an application uses any of the ArcGIS extension features, extension licenses. Each of these types of license are made available in certain license flavors: Engine Single Use; Desktop Concurrent Use; and Desktop Single Use.
- Engine Single Use—Provides access to ArcGIS Engine and its extension licenses. Each single-use license is only available to the machine on which it is installed.
- Engine Concurrent Use—FlexLM technology is used to provide concurrent access to the ArcGIS engine and its extension licenses. The licenses can be available to multiple machines; they are stored on a license manager and checked out when being used.
- Desktop Concurrent Use—FlexLM technology is used to provide concurrent access to the ArcGIS Desktop products—ArcView, ArcEditor, ArcInfo, and its extensions. The licenses can be available to multiple machines; they are stored on a license manager and checked out when being used.
- Desktop Single Use—Provides access to Single Use ArcView, ArcEditor, and ArcInfo licenses. As with the Engine Single Use licenses, each one is available only to the machine on which it is installed. Even though this is significantly different from the Desktop Concurrent Use licensing, it actually utilizes the same technology. This means that there is no mechanism for you, as an ArcGIS Engine developer, to differentiate between a Single Use and a Desktop Concurrent license, and hence, you would treat them the same.
Once an application has been initialized with a license, it cannot be reinitialized; an application is initialized with a license for the duration of its life. For example, you can't write an application that starts up with an ArcView license and later switches to ArcEditor.
When initializing an application with a license, the following must be considered:
- The types of product licenses with which the application can run. For example, an enterprise geodatabase editing application will not be able to run with an ArcGIS Engine license or an ArcView license. However, it will be able to run with an ArcGIS Engine with a Geodatabase Update extension license, an ArcEditor license, or an ArcInfo license.
Using an ArcView license with an ArcGIS Engine application will give you access to all the functionality available to a standard ArcGIS Engine license. Likewise, using an ArcEditor license with an ArcGIS Engine application that performs multiuser geodatabase editing will give you access to all the functionality available to an ArcGIS Engine license with the Geodatabase Update extension.
- The types of product licenses available to the application. For example, an application that can be run with an ArcGIS Engine license will also run with an ArcView, ArcEditor, and ArcInfo license. However, you may not want to consume an ArcInfo license with such an application.
When an application is initialized with a particular product license, a connection is made to a license server. All subsequent calls to check extensions in and out are made to the same license server. As such, you cannot use a combination of licenses from different license servers or Engine Single Use.
- If an application is initialized with a Desktop Concurrent license, the application will subsequently only be able to access that Desktop Concurrent license server and its extension licenses.
- If an application is initialized with a Desktop Single Use license, the application will subsequently only be able to access that single-use license server and its extension licenses.
- If an application is initialized with the Engine Single Use license on your machine, the application will subsequently only be able to access the Engine Single Use extension licenses.
It is possible before initialization has been performed to query the license servers (Desktop Concurrent or Single Use) and Engine Single Use to see if the licenses you require are available. If all the licenses you require are available using Engine Single Use, then it is recommended you use it, instead of the Desktop Concurrent and Desktop Single Use licenses. This means you will not limit the Desktop Concurrent licenses available to any other users.
The initialization process
The initialization of an application with a license must be performed in the following order:
-
Check whether the product license is available.
-
Check whether extension licenses are available (if required).
-
Initialize the application with the product license.
-
As required, perform extension checkouts and check-ins.
-
Shut down the application.
Applications built with any of the ArcGIS Engine Controls must also adhere to this license initialization process. MapControl, PageLayoutControl, SymbologyControl, TOCControl, and ToolbarControl applications require the ArcGIS Engine Runtime, ArcView, ArcEditor, or ArcInfo product licenses. Since the GlobeControl and SceneControl extend core ArcGIS Engine functionality, they require a corresponding 3D extension license in addition to the core product license.
Step 1: Check product license availability
The product license that is chosen determines the functionality the application will be able to access. Once the product license has been initialized, it cannot be changed for the duration of the application's life.
-
If the product you require is not licensed, you may optionally initialize the application with a higher product license.
-
If there are no appropriate product licenses available, the application should inform the user of the issue and either allow the user to resolve the issue or exit the application.
Step 2: Check extension license availability
If an application has been designed to use extension functionality, it may check for the availability of extension licenses before the application is initialized. Checking the availability of an extension license must be done in conjunction with the product license that the application will ultimately be initialized with, as not every extension license is available with every product license.
If an extension required by the application for it to run successfully is not available, the application should inform the user of the issue and exit the application.
- If the extension functionality is not necessary for the application to function and the extension license is unavailable, the application should disable to the user the functionality dependent on the extension.
Step 3: Initialize the application
Once it has been established that the appropriate product and extension licenses are available, the application should be initialized with the product license. Once initialized it is not possible to reinitialize the application.
Step 4: Check extensions in and out
Extensions can either be checked out when an application requires the extension functionality and checked in once the application has finished with the functionality or checked out directly after the application is initialized and checked back in before shutdown. The way that the extensions are checked in and out will depend on the type of product license with which the application was initialized.
-
If the application was initialized with either of the Engine Single Use licenses, any extensions used by the application will also be Engine Single Use. As such, any extensions can be checked out directly after the application is initialized and checked back in before shutdown.
-
If the application was initialized with a license server and the extensions are required by the application for it to run successfully, the extensions should be checked out directly after the application is initialized and checked back in before shutdown.
-
If the application was initialized with a license server and the extension functionality is not necessary for the application to function, the extensions can either be checked out directly after the application is initialized or checked out as the extension functionality is required. When the extension is checked in, the functionality should be disabled.
Step 5: Shutdown
Before an application is shut down, the AoInitialize object used to perform license initialization must be shut down. This ensures that any ESRI libraries that have been used are unloaded.
Why does initialization fail?
If a product or extension fails to check out, the license status indicates the reason for the failure. Licenses can fail to check out for the following reasons:
-
A product is not licensed.
-
A license is unavailable because it is already being used (Desktop Concurrent licenses only).
-
An unexpected license failure due to system administration problems.
-
The license is already initialized. An application is initialized with a product license for the duration of its life. It is possible to check with which product license an application has been initialized. For example, if an application containing some enterprise geodatabase editing has been initialized with an Engine Single Use with Geodatabase Update extension or an ArcEditor or ArcInfo license, the editing functionality can be enabled. If, however, the application has been initialized with an Engine Single Use or ArcView license, the editing functionality must be disabled.
License configuration
There are several ways to configure a custom application with a license:
-
Use the LicenseControl to automatically perform license initialization within graphical user interface applications using the MapControl, PageLayoutControl, TOCControl, ToolbarControl, SymbologyControl, SceneControl, or GlobeControl.
-
If greater control is required over license initialization, particularly when checking extension licenses in and out (the LicenseControl will check out extension licenses for the duration of an application's life), consider programmatically performing license initialization. To programmatically perform license initialization, use the AoInitialize and the IAoInitialize and ILicenseInformation interfaces it implements.
The coclass AoInitialize and the IAoInitialize and ILicenseInformation interfaces it implements are designed to give support to a developer for license initialization.
Example A: Minimum license is ArcGIS Engine with 3D and Spatial extensions
In this example, the application requires at minimum an ArcGIS Engine license. In addition, this developer has decided that if an ArcGIS Engine license is not available, the application could run with an ArcView or ArcEditor license instead. The application also requires 3D and Spatial extension functionality for it to run successfully, so both of these extensions need to be checked out for the duration of the application.
In this example, even though ArcInfo would also provide the functionality required, the developer has opted not to initialize with an ArcInfo license. It would be unnecessary to consume an ArcInfo license for this simple application.
In this case, the application will first attempt to initialize against the ArcGIS Engine product license. If that fails, it will attempt to initialize against an ArcView license, and if still unsuccessful, the application will finally attempt to initialize against the ArcEditor product license. The following sections outline the steps that must be taken to initialize the application with a license.
Attempting initialization with the ArcGIS Engine product license
As noted above, to run successfully the application requires at minimum an ArcGIS Engine product license along with the corresponding 3D and Spatial extension licenses. The application's first attempt at initialization should be against this minimal level of product licensing. The application's attempts at initialization follow the process discussed earlier.
-
Check whether an ArcGIS Engine product license is available.
If yes, proceed to the next step in the initialization process. If not, discontinue this attempt and restart initialization with any secondary level of allowable product licensing. -
Determine whether a 3D extension license is available for the ArcGIS Engine product license.
If yes, proceed with checks for any other needed extensions. If not, discontinue this attempt and restart initialization with any secondary level of allowable product licensing.
Since Spatial extension functionality is also required for this application, check whether a Spatial extension license is available for the ArcGIS Engine product license. -
If yes, proceed with checks for any other needed extensions. If not, discontinue this attempt and restart initialization with any secondary level of allowable product licensing.
-
In this case, no other extension licenses are needed. Proceed to the next step in the initialization process.
-
Check out the ArcGIS Engine product license by initializing the application.
If the license checked out, proceed to the next step in the initialization process. If the license failed to check out, discontinue this attempt and restart initialization with any secondary level of allowable product licensing. -
Check out the 3D extension for the ArcGIS Engine product license. If the license checked out, proceed with checkout for any other needed extensions. If the license failed to check out, discontinue this attempt and restart initialization with any secondary level of allowable product licensing.
-
Check out the Spatial extension for the ArcGIS Engine product license. If the license checked out, proceed with checkout for any other needed extensions.
If the license failed to check out, discontinue this attempt and restart initialization with any secondary level of allowable product licensing. -
In this case, no other extension licenses are needed. If the extension licenses are checked out, the application has been successfully configured with licenses.
-
The final step in the initialization process is ensuring that the licenses are released when the application is shut down.
Attempting initialization with the ArcView product license
In this example, a secondary level of licensing is available if the first ArcGIS Engine product level fails to initialize correctly. The application once again attempts to initialize by following the defined process.
-
Check whether an ArcView product license is available. If yes, proceed to the next step in the initialization process. If not, discontinue this attempt and restart initialization with any tertiary level of allowable product licensing.
-
Determine whether a 3D Analyst extension license is available with the ArcView product license. If yes, proceed with checks for any other needed extensions. If not, discontinue this attempt and restart initialization with any tertiary level of allowable product licensing.>
-
Check whether an ArcGIS Spatial Analyst extension license is available with the ArcView product license. If yes, since no other extensions are needed, proceed to the next step in the initialization process. If not, discontinue this attempt and restart initialization with any tertiary level of allowable product licensing.
-
Check out the ArcView product license by initializing the application. If the license checked out, proceed to the next step in the initialization process. If not, discontinue this attempt and restart initialization with any tertiary level of allowable product licensing.
The checkout of licenses may fail even though the availability check was successful. This is particularly possible in cases in which Desktop Concurrent licenses were initially available but may have since been checked out by another application.
- Check out the 3D Analyst extension. If the license checked out, proceed with checkout for any other needed extensions. If the license failed to check out, discontinue this attempt and restart initialization with any tertiary level of allowable product licensing.
- Check out the ArcGIS Spatial Analyst extension. Since no other extension licenses are needed, if the licenses are checked out, the application has been successfully configured with licenses. If not, discontinue this attempt and restart initialization with any tertiary level of allowable product licensing.
- The final step in the initialization process is ensuring that the licenses are released when the application is shut down.
Attempting initialization with the ArcEditor product license
In this example, if both the first (ArcGIS Engine) and second (ArcView) product levels fail to initialize correctly, a third level of licensingArcEditoris available. The application makes a final attempt to initialize by following the defined process.
-
Check whether an ArcEditor product license is available. If yes, proceed to the next step in the initialization process. If not, discontinue this final attempt. The application cannot run successfully at this time.
-
Determine whether a 3D Analyst extension license is available with the ArcEditor product license. If yes, proceed with checks for any other needed extensions. If not, discontinue this final attempt. The application cannot run successfully at this time.
-
Check whether an ArcGIS Spatial Analyst extension license is available with the ArcEditor product license. If yes, since no other extensions are needed, proceed to the next step in the initialization process. If not, discontinue this final attempt. The application cannot run successfully at this time
-
Check out the ArcEditor product license by initializing the application. If the license checked out, proceed to the next step in the initialization process. If the license failed to check out, discontinue this final attempt. The application cannot run successfully at this time.
-
Check out the 3D Analyst extension. If the license checked out, proceed with checkout for any other needed extensions. If the license failed to check out, discontinue this final attempt. The application cannot run successfully at this time.
-
Check out the ArcGIS Spatial Analyst extension. Since no other extension licenses are needed, if the licenses are checked out, the application has been successfully configured with licenses. If not, discontinue this final attempt. The application cannot run successfully at this time.
-
The final step in the initialization process is ensuring that the licenses are released when the application is shut down.
Example B: Minimum license is ArcGIS Engine with Geodatabase Update and Spatial Extensions
In the next example, the application is an enterprise geodatabase editing application and, therefore, requires the minimum of an ArcGIS Engine with Geodatabase Update extension license. Additionally, this developer has decided that if an ArcGIS Engine with Geodatabase Update extension license is not available, the application could run with an ArcEditor or ArcInfo license instead. The application also requires Spatial extension functionality for it to run successfully, so the extension needs to be checked out for the duration of the application. In this case, the application will first attempt to initialize against the ArcGIS Engine with Geodatabase Update extension product license. If that fails, it will attempt to initialize against an ArcEditor license, and if still unsuccessful, the application will finally attempt to initialize against the ArcInfo product license. The following sections outline the steps taken to initialize the application with a license.
Attempting initialization with the ArcGIS Engine with Geodatabase Update product license
As noted above, to run successfully the application requires at minimum an ArcGIS Engine with Geodatabase Update extension product license along with the corresponding Spatial extension license. The application's first attempt at initialization should be against this minimal level of product licensing.
The application's attempts at initialization follow the process discussed earlier:
-
Check whether an ArcGIS Engine with Geodatabase Update extension product license is available. If yes, proceed to the next step in the initialization process. If not, discontinue this attempt and restart initialization with any secondary level of allowable product licensing.
-
Check whether a Spatial extension license is available with the ArcGIS Engine with Geodatabase Update extension product license. If yes, proceed to the next step in the initialization process. If not, discontinue this attempt and restart initialization with any secondary level of allowable product licensing.
-
Check out the ArcGIS Engine with Geodatabase Update extension product license by initializing the application. If the license checked out, proceed to the next step in the initialization process. If the license failed to check out, discontinue this attempt and restart initialization with any secondary level of allowable product licensing.
-
Check out the Spatial extension. Since no other extension licenses are needed, if the license checked out, the application has been successfully configured with licenses. If the license failed to check out, discontinue this attempt and restart initialization with any secondary level of allowable product licensing.
-
The final step in the initialization process is ensuring that the licenses are released when the application is shut down.
Attempting initialization with the ArcEditor product license
In this example, a secondary level of licensing is available if the first ArcGIS Engine product level fails to initialize correctly. The application once again attempts to initialize by following the defined process.
-
Check whether an ArcEditor product license is available. If yes, proceed to the next step in the initialization process. If not, discontinue this attempt and restart initialization with any tertiary level of allowable product licensing.
-
Check whether an ArcGIS Spatial Analyst extension license is available with the ArcEditor product license. If yes, proceed to the next step in the initialization process. If not, discontinue this attempt and restart initialization with any tertiary level of allowable product licensing.
-
Check out the ArcEditor product license by initializing the application. If the license checked out, proceed to the next step in the initialization process. If the license failed to check out, discontinue this attempt and restart initialization with any tertiary level of allowable product licensing.
The checkout of licenses may fail even though the availability check was successful. This is particularly possible in cases where Desktop Concurrent licenses were initially available but may have since been checked out by another application.
- Check out the ArcGIS Spatial Analyst extension. Since no other extension licenses are needed, if the license checked out, the application has been successfully configured with licenses. If the license failed to check out, discontinue this attempt and restart initialization with any tertiary level of allowable product licensing.
- The final step in the initialization process is ensuring that the licenses are released when the application is shut down.
Attempting initialization with the ArcInfo product license
In this example, if both the first (ArcGIS Engine) and second (ArcEditor) product levels fail to initialize correctly, a third level of licensing is available, ArcInfo. The application makes a final attempt to initialize by following the defined process.
-
Check whether an ArcInfo product license is available. If yes, proceed to the next step in the initialization process. If not, discontinue this final attempt. The application cannot run successfully at this time.
-
Check whether an ArcGIS Spatial Analyst extension license is available with the ArcInfo product license. If yes, proceed to the next step in the initialization process. If not, discontinue this final attempt. The application cannot run successfully at this time.
-
Check out the ArcInfo product license by initializing the application. If the license failed to check out, discontinue this final attempt. The application cannot run successfully at this time.
-
Check out the ArcGIS Spatial Analyst extension. Since no other extension licenses are needed, if the licenses are checked out, the application has been successfully configured with licenses. If the license failed to check out, discontinue this final attempt. The application cannot run successfully at this time.
-
The final step in the initialization process is ensuring that the licenses are released when the application is shut down.
Example C: Minimum license is ArcGIS Engine. Optional network functionality available
Once again the example application requires a minimum of an ArcGIS Engine license. The developer has decided that if an ArcGIS Engine license is not available, the application could run with an ArcView, ArcEditor, or ArcInfo license instead. Similar to the previous examples, this application also includes extension functionality—Network—but, in this case, the extension is not required simply to run the application; instead, it enables additional functionality. As such the Network extension will be checked out dynamically during the use of the application rather than at application start-up.
Once again the application will first attempt to initialize against the ArcGIS Engine product license. If that fails, it will make additional attempts to initialize against an ArcView license, an ArcEditor license, and if still unsuccessful, the application will finally attempt to initialize against the ArcInfo product license. The following sections outline the steps taken to initialize the application with a license.
Attempting initialization with the ArcGIS Engine product license
As indicated above, to run successfully the application requires at minimum an ArcGIS Engine product license. While Network functionality is available within the application, its extension license can be checked out when needed rather than for the duration of the session. The application's first attempt at initialization should be against this minimal level of product licensing. The application's attempts at initialization follow the process discussed earlier.
-
Check whether an ArcGIS Engine product license is available. If yes, proceed to the next step in the initialization process. If not, discontinue this attempt and restart initialization with any secondary level of allowable product licensing.
-
Check whether a Network extension license is available with the ArcGIS Engine product license. If yes, proceed to the next step in the initialization process. If not, proceed to the next step in the initialization process.
-
Check out the ArcGIS Engine product license by initializing the application. If the license checked out, proceed to the next step in the initialization process. If the license failed to check out, discontinue this attempt and restart initialization with any secondary level of allowable product licensing.
Since this application dynamically checks out the Network extension, this step is not performed at this time. Instead, the license will be checked out during usage of Network functionality. See the section 'Using Network functionality' below for details on this process.
In this example, no licenses beyond the ArcGIS Engine product license need to be checked out, so if that license checked out, the application has been successfully configured with licenses. -
The final step in the initialization process is ensuring that the licenses are released when the application is shut down.
Attempting initialization with the ArcView product license
In this example, a secondary level of licensing is available if the first ArcGIS Engine product level fails to initialize correctly. The application once again attempts to initialize by following the defined process:
-
Check whether an ArcView product license is available. If yes, proceed to the next step in the initialization process. If not, discontinue this attempt and restart initialization with any tertiary level of allowable product licensing.
-
Check whether an ArcGIS Network extension license is available with the ArcView product license. If yes, proceed to the next step in the initialization process. If not, discontinue this attempt and restart initialization with any tertiary level of allowable product licensing.
-
Check out the ArcView product license by initializing the application. If the license checked out, proceed to the next step in the initialization process. If the license failed to check out, discontinue this attempt and restart initialization with any tertiary level of allowable product licensing.
Since this application dynamically checks out the ArcGIS Network extension, this step is not performed at this time. Instead, the license will be checked out during usage of Network functionality. See the section 'Using Network functionality' below for details on this process.
In this example, no licenses beyond the ArcGIS Engine product license need to be checked out, so if that license checked out, the application has been successfully configured with licenses. -
The final step in the initialization process is ensuring that the licenses are released when the application is shut down.
Attempting initialization with the ArcEditor product license
In this example, if both the first (ArcGIS Engine) and second (ArcView) product levels fail to initialize correctly, a third level of licensingArcEditoris available. The application makes another attempt to initialize by following the defined process:
-
Check whether an ArcEditor product license is available. If yes, proceed to the next step in the initialization process. If not, discontinue this attempt and restart initialization with any fourth level of allowable product licensing.
-
Check whether an ArcGIS Network extension license is available with the ArcEditor product license. If yes, proceed to the next step in the initialization process. If not, discontinue this attempt and restart initialization with any fourth level of allowable product licensing.
-
Check out the ArcEditor product license by initializing the application. If the license checked out, proceed to the next step in the initialization process. If the license failed to check out, discontinue this attempt and restart initialization with any fourth level of allowable product licensing.
Since this application dynamically checks out the ArcGIS Network extension, this step is not performed at this time. Instead, the license will be checked out during usage of Network functionality. See the section `Using Network functionality' below for details on this process.
In this example, no licenses beyond the ArcGIS Engine product license need to be checked out, so if that license checked out, the application has been successfully configured with licenses. -
The final step in the initialization process is ensuring that the licenses are released when the application is shut down.
Attempting initialization with the ArcInfo product license
If the first (ArcGIS Engine), second (ArcView), and third (ArcEditor) product levels fail to initialize correctly, one final level of licensingArcInfois available.
The application makes a final attempt to initialize by following the defined process.
-
Check whether an ArcInfo product license is available. If yes, proceed to the next step in the initialization process. If not, discontinue this attempt and restart initialization with any fourth level of allowable product licensing.
-
Check whether an ArcGIS Network extension license is available with the ArcInfo product license. If yes, proceed to the next step in the initialization process. If not, discontinue this attempt and restart initialization with any fourth level of allowable product licensing.
-
Check out the ArcInfo product license by initializing the application. If the license checked out, proceed to the next step in the initialization process. If the license failed to check out, discontinue this attempt and restart initialization with any fourth level of allowable product licensing.
Since this application dynamically checks out the ArcGIS Network extension, this step is not performed at this time. Instead, the license will be checked out during usage of Network functionality. See the section `Using Network functionality' below for details on this process.
In this example, no licenses beyond the ArcGIS Engine product license need to be checked out, so if that license checked out, the application has been successfully configured with licenses. -
The final step in the initialization process is ensuring that the licenses are released when the application is shut down.
Using Network functionality
During each of the initialization attempts in this example, the checkout of the Network extension did not occur during application start-up. Instead, the checkout occurs dynamically when the Network functions are accessed within the application. This means that the Network license continues to be available to other users when not in use by this application.
As discussed earlier in the chapter, the extension license must be of the same product type as the base license. If the application initialized with an ArcGIS Engine product license, then the Network functionality cannot be initialized unless an ArcGIS Engine extension license for Network is available. When the application user attempts to perform any Network functions, the application performs the following steps to activate the needed functions:
-
Check whether the Network extension is already checked out. If the license is checked out, the application can use the Network functionality. If the license is not checked out, check the license out.
-
Check out the Network extension. If the license failed to check out, then the application cannot use the Network functionality. If the license is checked out, the application can use the Network extension.
The checkout of licenses may fail even though the availability check was successful. This is particularly possible in cases where Desktop Concurrent licenses were initially available but may have since been checked out by another application.
After developing a custom standalone application, it should be tested with ArcGIS Engine Runtime before it is deployed to end user machines. A redistributable version of the ArcGIS Engine Runtime and registration numbers for the runtime testing of custom applications is included with your EDN subscription or ArcGIS Engine Developer Kit.