Click or drag to resize

Licensing and Deployment

In most cases, applications built with STK Components 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 an STK Components license, no additional licensing process is required to deploy the application to end-user machines. However, this does not mean that applications built with STK Components can be freely distributed.

While Software Development Kit licenses for STK Components can be obtained from AGI support, there are restrictions on how these licenses can be used:

  • We provide the STK Components 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 the STK Components 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 STK Components or an STK Components application to Cuba, Iran, Sudan, Syria, and North Korea.

  • See the full Software License Agreement, which is also included in the install media.

Simple Licensing

STK Components 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 STK Components 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 STKComponentsLicensePath environment variable to a directory where STK Components should look for its .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.

Insight3D Deployment

As previously stated, in most cases applications built with STK Components are xcopy deployable. However, Insight3D depends on the Microsoft Visual C++ Redistributable for Visual Studio 2017, 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 STK Components 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-57.dll, avformat-57.dll, avutil-55.dll, swresample-2.dll, swscale-4.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.

Advanced Licensing

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 STK Components (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 STK Components 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:

C#
Licensing.ActivateLicense("<License>" +
                          "  <Field name='Name'>Example Customer</Field>" +
                          "  <Field name='Company'>Example Company</Field>" +
                          "  <Field name='Note'>Not a Real License</Field>" +
                          "  <Component name='Nonexistent Analysis Library' />" +
                          "  <Signature>Q55ubmOJvPB1NlkN6R4QRkpH6s2wbc7cB/Z/Xdefzq1QvUDdKfQ6e1ZbJq7g7piGp4OCQV/ON0MycHhIw06xLNDCJxsNnq+yqdqpb1yBq9JXQb81jU2ogZDxowRCsXil3OR1fs0qENGW7LqE4JHcT/XudbTSWaQpIl6iRfWW0Do=</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 STK Components 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.

Licensing by Library

The table below is a complete list of all STK Components libraries and the licenses they require. 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

(the following classes additionally require TIREM Library: TiremPropagationModel3_18)

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.Tracking.dll

Dynamic Geometry Library, Tracking Library

AGI.Foundation.Tracking.Graphics.dll

Dynamic Geometry Library, Tracking Library, Insight3D