nAxiom Installation from CLI
📅 2026-05-21 1.15.6.5 👤 mmy, dbo ⏳ 39 min.
Table of contents
- 1. Introduction
- 2. System requirements
- 3. Command line parameters (CLI)
-
4. JSON configuration — full specification
- 4.1 Main structure
- 4.2
IISApplication— IIS website configuration - 4.3
Environment— Environment type -
4.4
Packages— Installation packages - 4.5
Databases— Database connections - 4.6
GlobalSettings— Administrator connection -
4.7
ResourceLocations— Resource locations - 4.8
Schemas— Database schemas - 4.9
Restrictions— IP restrictions - 4.10
MessageBrokerConfiguration— RabbitMQ - 4.11
DiagnosticsConfiguration— Diagnostics and telemetry (optional)
- 5. Example JSON configuration file
- 6. Exit codes (Exit Codes)
- 7. Limitations and known gaps
- 8. Best practices
- 9. FAQ / Troubleshooting
1. Introduction
TL;DR
.\AppInstaller.exe it=:file iv=:".\install.json" noguiExample configuration to save as install.json here. In the configuration, you must provide your own values for at least the following parameters:
- CertificateThumbprint: certificate thumbprint for Host
- CertificateStore: certificate store (if other than My)
- Server, Port, Instance: SQL Server address, port, instance name (three occurences)
- Username, Password: database admin name and password (GlobalSettings.DatabaseConnectionSA)
- MessageBrokerConfiguration: all parameters in the section
The nAxiom installer can be run from the command line to automatically perform a full nAxiom installation or update an existing nAxiom website, including changing configuration parameters. The installation process includes the following steps:
- configuring the IIS website and application pools,
- extracting application packages (ZIP) to the web server,
- configuring connections to SQL Server databases,
- setting database schemas,
- configuring the RabbitMQ message broker,
- configuring diagnostics (logs, OpenTelemetry),
- setting IP restrictions for individual applications,
- configuring resource locations (attachments, e-mail, OCR).
2. System requirements
The installer automatically verifies the requirements below in the first step. Requirements marked as mandatory block the installation if they are not met.
| Requirement | Mandatory | Description |
|---|---|---|
| Windows operating system | ✅ | Windows is required |
| .NET Framework 4.8 | ❌ | Used by Crystal Reports |
| .NET 8 | ✅ | Runtime environment for DotNetCore applications |
| ANCM (ASP.NET Core Hosting Bundle) | ✅ | Hosting module for IIS |
| IIS 8+ | ✅ | Internet Information Services |
| IIS — Directory Browsing | ✅ | HTTP feature: Directory Browsing |
| IIS — IP Security | ✅ | Security module: IP Address and Domain Restrictions |
| IIS — Static Content | ✅ | HTTP feature: Static Content |
| IIS — Application Initialization | ✅ | Application Initialization |
| IIS — WebSocket Protocol | ✅ | WebSocket support |
| URL Rewrite (IIS extension) | ✅ | URL Rewrite module |
| Microsoft SQL Server 2016+ | ❌ | Database (can be a remote server) |
| SAP Crystal Reports Runtime 13 | ❌ | Only if the Crystal module is installed |
| Administrator permissions | ✅ | Required to manage IIS |
| Erlang/OTP | ❌ | Required for RabbitMQ (version 27.0–27.3.4.2) |
| RabbitMQ | ❌ | Message broker (version 4.0–4.1.3) |
Note: The installer requires escalated permissions (
Run as Administrator).
3. Command line parameters (CLI)
3.1 Syntax
AppInstaller.exe [it=:<input_type>] [iv=:"<value>"] [nogui|noguiupdate]
3.2 Parameter list
| Parameter | Required | Description |
|---|---|---|
it=:<input_type> |
Yes* | Configuration input type. Allowed values: file, json
|
iv=:"<value>" |
Yes* | Input value — path to the JSON file (for it=:file) or minified JSON (for it=:json)** |
nogui |
No | Runs the installer in silent mode — full installation without GUI |
noguiupdate |
No | Runs the installer in silent mode — file update without changing configuration - it retrieves configuration settings from the website running on the IIS server |
Notes
* Parameters
itandivare required whennoguiornoguiupdateis provided.** For inline JSON, use a minified format and correctly apply escape characters (
\") in cmd/PowerShell.
3.3 Separator format
Key-value parameters use the =: separator (equals sign + colon):
it=:file
iv=:"C:\config\install.json"
3.4 Supported JSON file paths
| Path type | Example | Description |
|---|---|---|
| Absolute | C:\nAxiom\install.json |
Full path on disk |
Relative (.\) |
.\install.json |
Relative to the installer’s directory |
Parent (..\) |
..\config\install.json
|
Parent directory (with recursive support) |
3.5 Example usage
-
Running the command with the nogui parameter.
.\AppInstaller.exe it=:file iv=:".\install.json" noguiIn the example above, all settings will be read from the install.json file saved in the installer’s folder. During program execution, messages will be displayed in the console. Example file contents are provided in section 5.
-
Running the command with the noguiupdate parameter.
AppInstaller.exe it=:file iv=:".\install.json" noguiupdateExisting website update mode. It updates application files only (extracts new ZIP packages) without modifying configuration (databases, IIS, schemas, etc.). In this mode, only the
Packagessection is required from the JSON file.Important
The noguiupdate parameter is intended for use in environments where exactly one nAxiom website is running on the IIS server, because it retrieves configuration settings from it.
3.6 Mode comparison
| Function | nogui | noguiupdate |
|---|---|---|
| IIS configuration | ✅ | ❌ (skips) |
| Database configuration | ✅ | ❌ (skips) |
| Package extraction | ✅ | ✅ |
| Schema configuration | ✅ | ❌ (skips) |
| IP restrictions | ✅ | ❌ (skips) |
| RabbitMQ | ✅ | ❌ (skips) |
| Diagnostics | ⚠️ partial | ❌ (skips) |
| Console output | ✅ | ✅ |
| Requires full JSON | ✅ | ❌ (Packages only) |
4. JSON configuration — full specification
The JSON file contains the complete installation configuration. Each section is described below together with data types and allowed values.
4.1 Main structure
{
"IISApplication": { ... },
"Environment": { ... },
"Packages": [ ... ],
"Databases": [ ... ],
"GlobalSettings": { ... },
"ResourceLocations": [ ... ],
"Schemas": { ... },
"Restrictions": { ... },
"MessageBrokerConfiguration": { ... },
"DiagnosticsConfiguration": { ... }
}
4.2 IISApplication — IIS website configuration
{
"IISApplication": {
"MainBinding": {
"Host": "mysite.com",
"Port": 443,
"IpAddress": "*",
"Protocol": "https",
"CertificateThumbprint": "03C7D02F959CDEBB4C...",
"CertificateStore": "My"
},
"OptionalLocalBinding": {
"Host": "localhost",
"Port": 8082,
"IpAddress": "*",
"Protocol": "http"
},
"InstallationType": "Global",
"WebsiteName": "naxiom.mysite",
"WebsitePath": "C:\\inetpub\\naxiom",
"CompanyName": "MyCompany",
"PoolIdentityType": "ApplicationPoolIdentity",
"IdentityUser": "",
"IdentityPassword": ""
}
}
| Field | Type | Values | Description |
|---|---|---|---|
MainBinding.Host
|
string | — | Host name (domain) |
MainBinding.Port
|
int | 1–65535 | Website port |
MainBinding.IpAddress
|
string |
* or IP address |
Listening IP address |
MainBinding.Protocol
|
string | https |
Only the https protocol is supported |
MainBinding.CertificateThumbprint
|
string | hex | SSL certificate thumbprint (required) |
MainBinding.CertificateStore
|
string |
My, Root, etc. |
Windows certificate store |
OptionalLocalBinding
|
object/null | — | Optional additional binding (for example localhost over HTTP) |
InstallationType
|
string |
Local, Global
|
Local — local access; Global — Internet access |
WebsiteName
|
string | — | Website name in IIS |
WebsitePath
|
string | — | Disk path to the website files |
CompanyName
|
string | — | License key name |
PoolIdentityType
|
string |
ApplicationPoolIdentity, SpecificUser
|
Application pool identity |
IdentityUser
|
string | — | User name (required for SpecificUser) |
IdentityPassword
|
string | — | Password (required for SpecificUser) |
Globalinstallation: theHostvalue cannot belocalhostor127.0.0.1.
4.3 Environment — Environment type
{
"Environment": {
"EnvironmentType": "Production"
}
}
| Value | Description |
|---|---|
Development |
Development environment |
Test |
Test environment |
Production |
Production environment |
4.4 Packages — Installation packages
List of ZIP packages to install. Each entry corresponds to one application in the nAxiom platform. If the configuration file is saved in the folder with the installation packages, relative paths can be used.
{
"Packages": [
{
"Name": "Front",
"ZipPath": ".\\front.zip"
},
{
"Name": "Api",
"ZipPath": ".\\api.zip"
}
]
}
Available package names (Name):
| Name | Application type | Description | DB required |
|---|---|---|---|
Front |
Angular | Main website | ❌ |
Admin |
Angular | Administrator panel | ❌ |
Api |
.NET Core | Application Programming Interface (API) | ✅ |
Auth |
.NET Core | Authorization panel | ✅ |
TenantsApi |
.NET Core | Tenant management API | ✅ |
TenantsAdmin |
Angular | Tenant management application | ❌ |
Crystal |
.NET Framework | Crystal Reports generator | ✅ |
Workflow |
Angular | Graphical document flows | ❌ |
TaskService |
.NET Core | Scheduled task service | ✅ |
PublicApi |
.NET Core | Public API | ✅ |
OcrApi |
.NET Core | Text recognition API | ❌ |
Ocr |
Angular | OCR application | ❌ |
Syncfusion |
.NET Core | PDF file converter | ❌ |
ReportsApi |
.NET Core | Reports module | ✅ |
MobileApi |
.NET Core | API for the mobile application | ✅ |
DocApi |
.NET Core | Documentation module | ❌ |
DocPdf |
Content | PDF documentation | ❌ |
Word |
Angular | MS Word add-in | ❌ |
Outlook |
Angular | MS Outlook add-in | ❌ |
MobileTools |
Content | Mobile application generator files | ❌ |
Bpmn |
Angular | BPMN/DMN editor | ❌ |
Skipping packages: To skip installation of a specific package, simply remove it from the
Packagessection (and fromDatabases, if applicable).
4.5 Databases — Database connections
List of database configurations for applications that require them.
{
"Databases": [
{
"Name": "Api",
"DatabaseConnection": {
"Server": "localhost",
"UsePort": false,
"Port": 1433,
"Timeout": 15,
"Instance": "SQLEXPRESS",
"IntegratedSecurity": false,
"Username": "tenant1user",
"Password": "!Q2w3e4r",
"Database": "nAxiom"
}
},
{
"Name": "TenantsApi",
"DatabaseConnection": {
"Server": "localhost",
"UsePort": false,
"Port": 1433,
"Timeout": 15,
"Instance": "SQLEXPRESS",
"IntegratedSecurity": false,
"Username": "tenantadmin",
"Password": "!Q2w3e4r",
"Database": "nAxiom_tenantsAdmin"
}
}
]
}
| Field | Type | Default | Description |
|---|---|---|---|
Name |
string |
Api, TenantsApi
|
Name of the service using the database: Api - database used by all services, TenantsApi - tenants database |
Server |
string | localhost |
SQL server address |
UsePort |
bool | false |
Whether to use a custom port |
Port |
int | 1433 |
SQL Server port |
Timeout |
int | 120 |
Connection timeout (seconds) |
Instance |
string | SQLEXPRESS |
SQL instance name (empty = default) |
IntegratedSecurity
|
bool | true |
Whether to use Windows authentication |
Username |
string | "" |
SQL login (when IntegratedSecurity = false) |
Password |
string | "" |
SQL password (when IntegratedSecurity = false) |
Database |
string | nAxiom |
Database name |
4.6 GlobalSettings — Administrator connection
If the login provided for the TenantsApi database in Databases node exists on the server and has permissions to create databases and logins (dbcreator and securityadmin or sysadmin), providing credentials in this section is not required. The DatabaseConnectionSA structure is identical to DatabaseConnection described in section 4.5.
Info
The minimum permissions for the login provided in this section are dbcreator and securityadmin. It does not have to be the sa login.
{
"GlobalSettings": {
"DatabaseConnectionSA": {
"Server": "localhost",
"UsePort": false,
"Port": 1433,
"Timeout": 15,
"Instance": "SQLEXPRESS",
"IntegratedSecurity": false,
"Username": "sa",
"Password": "saPassword!@89",
"Database": ""
}
}
}
4.7 ResourceLocations — Resource locations
Defines where individual application resource types are stored.
{
"ResourceLocations": [
{
"ResourceType": "Attachments",
"Location": "DataBaseTable",
"DatabaseConnection": {
"Server": "localhost",
"UsePort": false,
"Port": 1433,
"Instance": "SQLEXPRESS",
"Username": "sa",
"Password": "!Q2w3e4r",
"Database": "nAxiom.TESTOWY"
},
"TableName": "dbo.my_attachments",
"FolderPath": ""
},
{
"ResourceType": "EmailMessages",
"Location": "InstallationFolder",
"DatabaseConnection": null,
"TableName": "",
"FolderPath": ""
},
{
"ResourceType": "Ocr",
"Location": "NoChange",
"DatabaseConnection": null,
"TableName": "",
"FolderPath": ""
},
{
"ResourceType": "AdditionalLibrary",
"Location": "InstallationFolder",
"DatabaseConnection": null,
"TableName": "",
"FolderPath": ""
}
]
}
Resource types (ResourceType):
| Value | Description |
|---|---|
Attachments |
Document attachments |
EmailMessages |
E-mail messages |
Ocr |
Recognized OCR files |
AdditionalLibrary |
Additional libraries |
Location (Location):
| Value | Usage | Description |
|---|---|---|
InstallationFolder |
First installation / update | Website installation folder |
SelectedFolder |
First installation / update | Selected folder on disk (requires FolderPath) |
DataBaseTable |
First installation / update | Table in the database (requires DatabaseConnection and TableName) |
NoChange |
Update only | Keeps current settings (does not change configuration) |
4.8 Schemas — Database schemas
{
"Schemas": {
"AppCoreSchema": "core",
"AppAuthSchema": "auth",
"AppUserSchema": "*"
}
}
| Field | Default | Description |
|---|---|---|
AppCoreSchema |
core |
System tables schema |
AppAuthSchema |
auth |
Authorization tables schema |
AppUserSchema |
* |
User tables schema (* = all) |
4.9 Restrictions — IP restrictions
Configuration of IP traffic filtering at the IIS application level.
{
"Restrictions": {
"ClearRestrictions": false,
"Applications": [
{
"Name": "front",
"Restrictions": [
{
"Ip": "192.168.1.1",
"Mask": "255.255.255.255",
"HasMask": false,
"Traffic": "Allow"
}
]
},
{
"Name": "api",
"Restrictions": [
{
"Ip": "192.168.1.0",
"Mask": "255.255.255.0",
"HasMask": true,
"Traffic": "Deny"
}
]
}
]
}
}
| Field | Type | Description |
|---|---|---|
ClearRestrictions |
bool |
true = clear existing restrictions before adding new ones |
Applications\[].Name
|
string | Application name (lowercase, e.g. front, api) |
Restrictions\[].Ip
|
string | IP address |
Restrictions\[].Mask
|
string | Subnet mask |
Restrictions\[].HasMask
|
bool | Whether to apply the subnet mask |
Restrictions\[].Traffic
|
string |
Allow or Deny
|
4.10 MessageBrokerConfiguration — RabbitMQ
{
"MessageBrokerConfiguration": {
"HostName": "amqps://rabbitmq.mycompany.com",
"VirtualHostName": "/",
"UserName": "naxiom",
"Password": "secretPassword",
"StartLocalServices": false,
"UseSsl": true,
"RabbitNodePort": 0,
"RabbitDistPort": 0,
"RabbitManagementConsolePort": 0,
"ErlangEpmdPort": 0
}
}
| Field | Type | Description |
|---|---|---|
HostName |
string | RabbitMQ host address |
VirtualHostName
|
string | Virtual host name in RabbitMQ |
UserName |
string | RabbitMQ user |
Password |
string | RabbitMQ password |
StartLocalServices
|
bool |
true = start local RabbitMQ services (local installation) |
UseSsl |
bool | ‘true’ = use a secure connection (amqps) |
RabbitNodePort
|
int | RabbitMQ node port (default 5672) |
RabbitDistPort
|
int | Erlang distribution port |
RabbitManagementConsolePort
|
int | RabbitMQ management console port (default 15672) |
ErlangEpmdPort
|
int | Erlang EPMD port (default 4369) |
When
StartLocalServices = true, the installer configures the ports and starts local RabbitMQ services. Whenfalse, provide the address of the remote RabbitMQ server.
4.11 DiagnosticsConfiguration — Diagnostics and telemetry (optional)
{
"DiagnosticsConfiguration": {
"LogLevel": "Info",
"LogsTarget": "Db3",
"ElasticEndpoint": "",
"ElasticUserName": "",
"ElasticPassword": "",
"TelemetryEnabled": false,
"TracesEndpoint": "",
"TracesProtocol": "",
"LogsEndpoint": "",
"LogsProtocol": "",
"MetricsEndpoint": "",
"MetricsProtocol": ""
}
}
| Field | Type | Values | Description |
|---|---|---|---|
LogLevel |
string |
Trace, Debug, Info, Warn, Error, Fatal
|
Logging level (NLog) |
LogsTarget |
string |
Db3, ElasticSearch
|
Log target: SQLite files (Db3) or ElasticSearch |
ElasticEndpoint
|
string | URL | ElasticSearch endpoint |
ElasticUserName
|
string | — | ElasticSearch user |
ElasticPassword
|
string | — | ElasticSearch password |
TelemetryEnabled
|
bool | — | Enable OpenTelemetry |
TracesEndpoint
|
string | URL | OTLP traces endpoint |
TracesProtocol
|
string |
grpc, http/protobuf
|
OTLP traces protocol |
LogsEndpoint
|
string | URL | OTLP logs endpoint |
LogsProtocol
|
string |
grpc, http/protobuf
|
OTLP logs protocol |
MetricsEndpoint
|
string | URL | OTLP metrics endpoint |
MetricsProtocol
|
string |
grpc, http/protobuf
|
OTLP metrics protocol |
Important
The
DiagnosticsConfigurationsection is supported only innoguimode. Innoguiupdatemode it is ignored. Additional limitations are described in section 8.
5. Example JSON configuration file
Below is a complete configuration file for installation in nogui mode:
{
"IISApplication": {
"MainBinding": {
"Host": "localhost",
"Port": 1575,
"IpAddress": "*",
"Protocol": "https",
"CertificateThumbprint": "17653d6ccf0f16b0.....",
"CertificateStore": "My"
},
"OptionalLocalBinding": null,
"InstallationType": "Local",
"WebsiteName": "naxiom",
"WebsitePath": "C:\\inetpub\\naxiom",
"CompanyName": "nAxiom",
"PoolIdentityType": "ApplicationPoolIdentity",
"IdentityUser": "",
"IdentityPassword": ""
},
"Environment": {
"EnvironmentType": "Development"
},
"Packages": [
{ "Name": "Front", "ZipPath": ".\\front.zip" },
{ "Name": "Admin", "ZipPath": ".\\admin.zip" },
{ "Name": "Api", "ZipPath": ".\\api.zip" },
{ "Name": "Auth", "ZipPath": ".\\auth.zip" },
{ "Name": "TenantsApi", "ZipPath": ".\\tenantsApi.zip" },
{ "Name": "TenantsAdmin", "ZipPath": ".\\tenantsAdmin.zip" },
{ "Name": "Workflow", "ZipPath": ".\\workflow.zip" },
{ "Name": "TaskService", "ZipPath": ".\\taskservice.zip" },
{ "Name": "PublicApi", "ZipPath": ".\\publicApi.zip" },
{ "Name": "Syncfusion", "ZipPath": ".\\syncfusion.zip" },
{ "Name": "ReportsApi", "ZipPath": ".\\reportsApi.zip" },
{ "Name": "DocApi", "ZipPath": ".\\docApi.zip" },
{ "Name": "Bpmn", "ZipPath": ".\\bpmn.zip" }
],
"Databases": [
{
"Name": "Api",
"DatabaseConnection": {
"Server": "localhost",
"UsePort": false,
"Port": 1433,
"Timeout": 30,
"Instance": "SQLEXPRESS",
"IntegratedSecurity": false,
"Username": "naxiom_user",
"Password": "p@assword",
"Database": "naxiom"
}
},
{
"Name": "TenantsApi",
"DatabaseConnection": {
"Server": "localhost",
"UsePort": false,
"Port": 1433,
"Timeout": 30,
"Instance": "SQLEXPRESS",
"IntegratedSecurity": false,
"Username": "naxiom_tenantadmin",
"Password": "p@assword!",
"Database": "naxiom_tenantsAdmin"
}
}
],
"GlobalSettings": {
"DatabaseConnectionSA": {
"Server": "localhost",
"UsePort": false,
"Port": 1433,
"Timeout": 30,
"Instance": "SQLEXPRESS",
"IntegratedSecurity": false,
"Username": "sa",
"Password": "$trongP@ssword",
"Database": ""
}
},
"ResourceLocations": [
{
"ResourceType": "Attachments",
"Location": "InstallationFolder",
"DatabaseConnection": null,
"TableName": "",
"FolderPath": ""
},
{
"ResourceType": "EmailMessages",
"Location": "InstallationFolder",
"DatabaseConnection": null,
"TableName": "",
"FolderPath": ""
},
{
"ResourceType": "Ocr",
"Location": "InstallationFolder",
"DatabaseConnection": null,
"TableName": "",
"FolderPath": ""
},
{
"ResourceType": "AdditionalLibrary",
"Location": "InstallationFolder",
"DatabaseConnection": null,
"TableName": "",
"FolderPath": ""
}
],
"Schemas": {
"AppCoreSchema": "core",
"AppAuthSchema": "auth",
"AppUserSchema": "*"
},
"Restrictions": {
"ClearRestrictions": false,
"Applications": [
{ "Name": "front", "Restrictions": [{ "Ip": "", "Mask": "255.255.255.255", "HasMask": false, "Traffic": "Allow" }] },
{ "Name": "api", "Restrictions": [{ "Ip": "", "Mask": "255.255.255.255", "HasMask": false, "Traffic": "Allow" }] },
{ "Name": "auth", "Restrictions": [{ "Ip": "*", "Mask": "255.255.255.255", "HasMask": false, "Traffic": "Allow" }] },
{ "Name": "workflow", "Restrictions": [{ "Ip": "127.0.0.1", "Mask": "255.255.255.255", "HasMask": false, "Traffic": "Allow" }] }
]
},
"MessageBrokerConfiguration": {
"HostName": "amqp://localhost:8762",
"VirtualHostName": "naxiom",
"UserName": "naxiomRabbitUser",
"Password": "!Q2w3e4r",
"UseSsl": false,
"StartLocalServices": false,
"RabbitNodePort": 8762,
"RabbitDistPort": 28762,
"RabbitManagementConsolePort": 18762,
"ErlangEpmdPort": 4369
},
"DiagnosticsConfiguration": {
"LogLevel": "Error",
"LogsTarget": "Db3",
"TelemetryEnabled": false
}
}
6. Exit codes (Exit Codes)
| Code | Meaning |
|---|---|
0 |
Installation completed successfully |
1 |
An error occurred during installation |
10 |
Installation interrupted before the installation step |
In nogui/noguiupdate mode, the exit code is available via:
-
cmd:echo %ERRORLEVEL% -
PowerShell:$LASTEXITCODE
7. Limitations and known gaps
7.1 nogui mode limitations
| Limitation | Description |
|---|---|
| No input data validation | The installer does not verify the correctness of values in the JSON file before starting the installation. Incorrect data may cause unpredictable behavior. |
| Diagnostics — partial support | The DiagnosticsConfiguration section in nogui mode is only partially supported — the SetSettings method accepts the model, but does not apply all values to the controls. The main diagnostics configuration is read from existing appsettings.json files, environment variables, and the TenantAdmin database. Default settings may be applied instead of those from the JSON. |
No --help parameter |
The installer does not provide built-in CLI help. |
7.2 noguiupdate mode limitations
| Limitation | Description |
|---|---|
| One website |
noguiupdate mode works correctly only when exactly one nAxiom website exists in IIS. |
| No configuration change | Only files are updated — IIS settings, databases, schemas, restrictions, etc. remain unchanged. |
7.3 General limitations
| Limitation | Description |
|---|---|
| Windows only | The installer works only on Windows. |
| Administrator permissions required | IIS operations require running as an administrator. |
| Passwords in plain text | Passwords in the JSON file are stored in plain text. Connection strings are encrypted only after they are written to configuration files. |
| No JSON validation | There is no JSON Schema to validate the configuration file. Errors in the JSON structure cause deserialization exceptions. |
| No file logging | In nogui mode, messages are displayed in the console — there is no dedicated installation log file (only summary.json after completion). |
| No rollback mechanism | In the event of an installation error — changes are not automatically rolled back (configuration is restored from backup, but the IIS website may remain in an inconsistent state). |
8. Best practices
-
Validate JSON — before running, check the correctness of the JSON syntax (for example
python -m json.tool install.jsonor any editor with highlighting). - Do not leave passwords in the file — after installation, delete the configuration file or secure it with appropriate permissions.
- JSON file permissions — restrict access to the configuration file (it contains passwords in plain text).
- Delete the file after installation — after a successful installation, delete the JSON file containing credentials.
- IP restrictions — for backend applications (Api, TaskService, Crystal), consider restricting access to internal traffic.
-
Application pool account — in a production environment, consider using a dedicated account (
SpecificUser) instead ofApplicationPoolIdentity. -
Backup before update — the installer creates
.backupfiles, but it is worth having a full copy of the website directory. -
Use
noguiupdateto update files — (applies to environments with one website) it does not change configuration, minimizing risk. -
summary.jsonfile — after installation, check thesummary.jsonfile in the installer’s directory — it contains the website URL. -
Relative paths — use relative paths in the JSON file (
.\front.zip) — this makes moving between environments easier. -
Check the exit code — in scripts, always verify
$LASTEXITCODE/%ERRORLEVEL%. -
Output redirection — in
noguimode, output is directed to the console:.\AppInstaller.exe it=:file iv=:".\install.json" nogui 2>&1 | Tee-Object -FilePath "install.log" - Separate JSON per environment — prepare separate configuration files for dev/test/prod.
- To skip installation of optional modules (e.g. OcrApi, Crystal, PublicApi):
- Remove the package entry from the
Packagessection. - Remove the entry from the
Databasessection (if the application requires a database). - Make sure no other section refers to the skipped package.
- Remove the package entry from the
9. FAQ / Troubleshooting
The installer exits immediately with code 1
Cause: Missing correct JSON configuration when using the nogui/noguiupdate flag.
Solution: Make sure the it and iv parameters are correctly formatted. The separator is =: (not =).
Error: “No website found for automatic update”
Cause: noguiupdate mode did not find any nAxiom website in IIS.
Solution: Make sure there is a website in IIS with an application pool whose name starts with naxiom..
Error: “Automatic update cannot be performed if more than one website exists”
Cause: More than one nAxiom website exists in IIS.
Solution: Use nogui mode with full JSON configuration instead of noguiupdate.
The SSL certificate was not found
Cause: The provided CertificateThumbprint does not match any certificate in the store.
Solution: Check the certificate thumbprint in MMC (Certificates → Local Computer) and make sure the CertificateStore value is correct (usually My for Personal).
The JSON file cannot be found
Cause: The path in the iv parameter is incorrect.
Solution:
- Use an absolute path:
iv=:"C:\config\install.json" - The relative path
.\refers to the directory whereAppInstaller.exeis located, not to the current working directory.