Licensing and Deployment |
In most cases, applications built with DME Component Libraries are xcopy deployable. This means they can simply be copied to another machine and run. There is no registration step, and no changes to the registry are required. Once your application is built with a DME Component Libraries license, no additional licensing process is required to deploy the application to end-user machines. However, this does not mean that applications built with DME Component Libraries can be freely distributed.
While Software Development Kit licenses for DME Component Libraries can be obtained from AGI support, there are restrictions on how these licenses can be used:
We provide DME Component Libraries Software Development Kit for exploration of the API while you evaluate its appropriateness for your applications.
At the point that you decide to build applications for production testing, for others to use, for use on funded research, for deployment in corporate or operational environments, or for commercial resale, you must purchase the appropriate run-time licenses as described in the license agreement.
You may not distribute, license, lease, sell, transfer any of DME Component Libraries without the appropriate commercial license granted by AGI or other expressly granted permission by AGI.
You may not reverse assemble, reverse compile, translate or perform any other actions that violate standard software usage piracy laws.
In compliance with U.S. Export Control Regulations and Laws, you may not redistribute DME Component Libraries or a DME Component Libraries application to Cuba, Iran, Sudan, Syria, and North Korea.
See the full Software License Agreement, which is also included in the install media as DME Component Libraries License Agreement.pdf.
DME Component Libraries uses the Microsoft .NET License Compiler to validate its license at compile time and embed it in the target application so that it is available at runtime. The way this works is as follows:
The user adds licenses.licx to their Visual Studio project. This file is found in the Assemblies subdirectory under the DME Component Libraries install directory.
When Visual Studio sees this licenses.licx file, it invokes the Microsoft .NET License Compiler (lc.exe) to "compile" it.
The licenses.licx file contains the name of a type in the AGI.Foundation.Core.dll assembly: Licensing. The License Compiler, still at compile time, loads this assembly and creates an object of that type. It then asks the object to verify the presence of a valid license.
Licensing looks for the presence of the actual license file(s) in the same directory as the AGI.Foundation.Core.dll assembly. License files have a .lic extension, not to be confused with the .licx extension of the licenses.licx license compiler file. All .lic files in the directory are loaded and checked for tampering. The set of available licenses is then the "best superset" of the licenses in all .lic files. Optionally, you can set the DMEComponentLibrariesLicensePath environment variable to a directory where DME Component Libraries should look for the .lic files, instead of looking in the directory that contains the assemblies. This environment variable can be set by defining the LCEnvironment property in a Visual Studio project file.
Licensing returns the set of all available licenses to the License Compiler, which embeds the licenses in the assembly that Visual Studio is currently compiling. Having done this, the assembly now stands completely alone from a licensing perspective. It is NOT necessary to distribute either the .lic files or the licenses.licx file along with the assembly.
As previously stated, in most cases applications built with DME Component Libraries are xcopy deployable. However, Insight3D depends on the Microsoft Visual C++ Redistributable for Visual Studio 2022, which should be installed on any system where you intend to run your application. For convenience, the installer, vc_redist.x64.exe, is included in the root directory of your DME Component Libraries installation.
The ability to load the required dependencies from the application directory ("app-local") is also technically possible, but due to the complexity is not described here. Contact AGI support if you have a need to deploy Insight3D applications without an installer on systems that cannot install the redistributable.
Additionally, certain Insight3D features require third-party functionality from separate DLLs. Specifically, using videos as 2D textures requires FFmpeg video processing libraries (avcodec-58.dll, avformat-58.dll, avutil-56.dll, swresample-3.dll, swscale-5.dll), and MrSID imagery requires the LizardTech MrSID DSDK (Altidsdk_9.5.dll, Alb.dll).
These separate DLLs will be loaded when needed at runtime from the same directory as the Insight3D library (AGI.Foundation.Graphics.dll). You can either copy these files to your project output directory manually, or you can add these DLLs as content to your Visual Studio project and mark the files as Copy if newer.
Alternatively, if you don't use any functionality in Insight3D that requires the separate DLLs, you can skip this.
The TIREM library includes an implementation named TiremPropagationModel which uses a native library to perform the calculation. As a result, use of this functionality requires dependencies to be installed on the system.
See the TIREM topic for more information.
In certain advanced scenarios, it may not be possible to use the Microsoft .NET License Compiler. These include:
You are building a plugin for an application that may end up loading multiple plugins that use DME Component Libraries (yours and others) into the same AppDomain. In this case, the .NET licensing infrastructure may discover the licenses embedded by the License Compiler for the wrong plugin and fail at runtime.
You are not using Visual Studio to build your application. For example, if you are using the Mono C# compiler, Mono does not include a license compiler. If you're using Microsoft tools from the command-line, you should still be able to use the Microsoft .NET License Compiler. However, it may be simpler to use the technique described below instead.
You are not writing your application in a .NET language, in which case you will need to use the alternate licensing method described below.
The alternate licensing process is to call the LicensingActivateLicense method near the start of your application, before using any other DME Component Libraries functionality. This requires that you manually embed the contents of your license file(s) in your application so that they can be accessed as a string at runtime and passed to the ActivateLicense method. Because AGI license files are XML, you can simply paste the contents into your source code as a string. For example:
Licensing.ActivateLicense("<License>" + " <Field name='Name'>Example Customer</Field>" + " <Field name='Company'>Example Company</Field>" + " <Field name='Note'>Not a Real License</Field>" + " <Field name='Maintenance Expiration Date'>2025/12/31</Field>" + " <Component name='Nonexistent Analysis Library' />" + " <Signature>DRws/wLW81rjcOMp2Kk5k5U7uDJ234YN/qdWgb0lbzctUwAStN9RMO4qBiQPAVg2zgZIqelHBLc5TryqShHzxKugABd5Dn6jLYUHT0+NDoW/vKteZjMg74Phe68Kc1bqOabjnfp6iSgduMSxJJPMQX3aZPT+WC5r7c+/zrMMX+M=</Signature>" + "</License>");
The ActivateLicense method can be called multiple times, and the available licenses will be the "best superset" of the licenses supplied in all calls.
Note that the presence of licenses.licx in your project will cause Visual Studio and DME Component Libraries to try to find and load a .lic file at compile time, and compilation will fail if it is unable to do so. If you are using ActivateLicense, you should remove licenses.licx from your project.
The table below is a complete list of all libraries and the licenses required by each. In most cases, each library requires a single license, plus licenses for all libraries it depends upon. However, there are some cases where some classes require an additional license beyond those of the rest of the library. These cases are listed below as well.
Assembly | Licenses Required |
---|---|
AGI.Foundation.AircraftPropagation.dll | Dynamic Geometry Library, Aircraft Propagation Library |
AGI.Foundation.Cesium.dll | Dynamic Geometry Library |
AGI.Foundation.Communications.dll | Dynamic Geometry Library, Communications Library |
AGI.Foundation.Core.dll | Dynamic Geometry Library |
AGI.Foundation.Graphics.dll | Dynamic Geometry Library, Insight3D |
AGI.Foundation.Models.dll | Dynamic Geometry Library (the following classes, and all classes derived from these classes, additionally require Segment Propagation Library: SegmentDefinition, SegmentList, SegmentListConfiguration, SegmentListPropagator, SegmentListResults, SegmentPropagator, SegmentResults, SegmentPropagatorConstraint, SegmentPropagatorConstraintEvaluator, SegmentPropagatorVariableEvaluator) |
AGI.Foundation.Navigation.dll | Dynamic Geometry Library, Navigation Accuracy Library |
AGI.Foundation.Navigation.Advanced.dll | Dynamic Geometry Library, Communications Library, Navigation Accuracy Library |
AGI.Foundation.OrbitPropagation.dll | Dynamic Geometry Library, Orbit Propagation Library |
AGI.Foundation.Platforms.dll | Dynamic Geometry Library |
AGI.Foundation.Platforms.Graphics.dll | Dynamic Geometry Library, Insight3D |
AGI.Foundation.Radar.dll | Dynamic Geometry Library, Radar Library |
AGI.Foundation.RouteDesign.dll | Dynamic Geometry Library, Route Design Library |
AGI.Foundation.SegmentPropagation.dll | Dynamic Geometry Library, Segment Propagation Library (the following classes additionally require Orbit Propagation Library: BasicLaunchSegment, ImpulsiveManeuverSegment) |
AGI.Foundation.Spatial.dll | Dynamic Geometry Library, Spatial Analysis Library |
AGI.Foundation.TerrainAnalysis.dll | Dynamic Geometry Library, Terrain Analysis Library |
AGI.Foundation.TerrainReaders.dll | Dynamic Geometry Library |
AGI.Foundation.Tirem.dll | Dynamic Geometry Library, Communications Library, TIREM Library |
AGI.Foundation.Tracking.dll | Dynamic Geometry Library, Tracking Library |
AGI.Foundation.Tracking.Graphics.dll | Dynamic Geometry Library, Tracking Library, Insight3D |