Lime CRM Desktop Client 11.3: technical details for administrators and support
- Product
- Lime CRM Desktop Client
- Applies to
- upgrade from 11.2.3960 to 11.3.4747
- Audience
- administrators, support, consultants
This page is a reference. It lists settings, paths, logs and installer facts as of 11.3.4747. For a description of the new features, see the release notes of 11.3.4747.
Placeholders in this page:
<server>.<database>: the server name and the database name, as the client writes them in the registry key name.<WorkingFolder>: the local working folder of the database. The default is%LOCALAPPDATA%\Lundalogik\Lime\Databases\<server>.<database>. With the database settingUseRoamingWorkingFolder= 1, the client uses%APPDATA%instead.<user>: the Lime CRM user name of the active user.
New and changed settings
How the client finds a setting
All client settings are registry values under Software\Lundalogik\Lime\Settings. A setting has a path, for example Application\UnsentDocumentsScanDelay. The client reads the value in this order and uses the first value it finds:
HKCU\Software\Lundalogik\Lime\Settings\Custom\<path>. These are the values the user saves, for example in the Options dialog.HKCU\Software\Lundalogik\Lime\Settings\Default\<path>. These are the published settings. An administrator publishes them with the button Publish settings on the Settings page of the Options dialog. The client copies them from the server to this key at every login.HKLM\Software\Lundalogik\Lime\Settings\Default\<path>. These are machine defaults, for example from a group policy.- The default value in the code.
There are two scopes:
- Application scope: the key is
<path>as written. - Database scope: the key is
Databases\<server>.<database>\<path>. The value applies to one database only.
Some settings are inherited. The client then reads Application\<name> at application scope, then at database scope, then in the settings of the list or card, and then uses the code default. AllowWebClient and PreferWebClient skip the application scope. When no database is open, the database scope has no value and the lookup continues. Earlier 11.3 builds raised an error in this case.
Settings table
Scope “Application” and “Database” use the lookup order above. “Machine” means HKLM only. Values are DWORD unless the table says otherwise.
| Setting | Scope | Type and values | Default | What it does | Status in 11.3 |
|---|---|---|---|---|---|
Application\UnsentDocumentsScanDelay | Application | Seconds, 1 to 86400. A value below 1 counts as 1. A value above 86400, or a value that is not a number, gives the default. | 20 | Delay after login before the first check for unsent documents. A second check always runs 5 minutes after login. | New |
Application\FileExtensions\*.*\NoLock | Application | 0 or 1 | 0 | 1: the client takes no edit lock when a user opens a document for editing. Applies to all file types. | Exists in 11.2. It has an effect again because edit locks are active again in 11.3. |
Application\FileExtensions\<extension>\NoLock | Application | 0 or 1 | Value of *.* | Same as above for one file type, for example docx. This value has priority over the *.* value. | As above |
Application\Options\HiddenSettings\<name> | Application | 1: hidden. 0 or no value: visible. | 0 | Hides one control in the Options dialog. Administrators always see all controls. The value names are listed below this table. | New |
Application\IntegrateWebClient | Application | 0 or 1 | 1 | 0 disables all web client features: menu items, Ctrl+click, the VBA API, and the options AllowWebClient and PreferWebClient. | New |
Application\AllowWebClient | Database. The application scope is not read. | 0 or 1 | The class tag allowWebClient. Without a tag: 0. | 1 allows “Open in web client” for records. Options > Misc. | New. Since 11.3.4474 the scope is database. Values that earlier 11.3 builds wrote at application scope are ignored. |
Application\PreferWebClient | Database. The application scope is not read. | 0 or 1 | 0 | 1 opens records in the web client instead of a card. The class also needs the tag preferWebClient = true. In the menu of a relation field drop-down list, a missing tag counts as true. Has no effect when IntegrateWebClient is 0. | New |
UrlEncoding\UseLegacyCodePage | Application. The path does not start with Application\. | 0 or 1 | 0 | 1: the client decodes limecrm: link URLs with the code page of the user's locale. 0: the client detects the encoding (UTF-8 first). | New |
Application\EnableInspectorFullTextSearch | Database | 0 or 1 | 0 | Shows the search bar on cards. Needs full-text search on the server and DisableFullTextSearch = 0. Options > Misc, “Show super search on cards”. | Exists in 11.2. The 11.2 behaviour is restored. Changes apply to open cards without a restart. |
Application\DisableFullTextSearch | Database | 0 or 1 | 0 | 1 disables global search, also when the web client is integrated. | Exists in 11.2. Now also controls global search through the web client. |
Application\UseRelevanceScoring | Database (per user and database) | 0 or 1 | 0 | Sorts relation search results by relevance. Options > Misc, “Use relevance scoring for searching relations”. | New |
Application\DimFieldsIfNULL | Application | 0 or 1 | 0 | Dims fields that have no value. Options > Misc. A value that a user saved earlier is kept. | Default changed from 1 to 0 |
Application\IncludeClassFilters | Database | 0 or 1 | 1 | 0: a card does not include the filters of the record type. Applies after the next start. Options > Misc. | New |
Application\IncludeClassViews | Database | 0 or 1 | 1 | 0: a card does not include the views of the record type. Applies after the next start. Options > Misc. | New |
Application\Dialogs\ModifyData\RefreshAfterUpdate | Application | 0 or 1 | 1 | Checkbox “Reload list after update” in the Mass update dialog. | New |
Dialogs\SearchRecords\<class GUID>\SearchSortField | Database | String: a field name | Empty: the order of the search view | Sort field for the search in relation fields. Search settings dialog, “Ascending by” or “Descending by”. | New |
Dialogs\SearchRecords\<class GUID>\SearchSortAscending | Database | true or false | true | Sort direction for SearchSortField. | New |
HKLM\Software\Lundalogik\Lime\Security\ShellGateHardBlock | Machine. The client also reads HKLM\Software\Wow6432Node\Lundalogik\Lime\Security. It never reads HKCU. | 0 or not 0 | Not set | Not 0: a risky launch is blocked without a prompt. See “File-security prompts” in the section about document handling. | New |
HKLM\…\Lime\Security\ShellSchemeAllowList | Machine, as above | REG_MULTI_SZ, one URL scheme per line | Empty | A listed scheme is allowed without the handler check. It cannot allow the schemes that are always blocked. | New |
HKLM\…\Lime\Security\ShellSchemeBlockList | Machine, as above | REG_MULTI_SZ | Empty | A listed scheme is always blocked, without a prompt. Has priority over the allow list. | New |
HKLM\…\Lime\Security\ShellVerbAllowList | Machine, as above | REG_MULTI_SZ | Empty | Allows more ShellExecute verbs. | New |
HKLM\…\Lime\Security\ShellVerbBlockList | Machine, as above | REG_MULTI_SZ | Empty | A listed verb is always blocked. runas and runasuser are always blocked. | New |
Filter property QueryTimeout | Filter | Seconds. 0: use the database value. | 0 | Total time for a list query, including the wait in the client queue. | Changed: the time now includes the client queue. A sub-filter cannot extend the time. |
features.databaseTimeout | Server configuration | Seconds | 60 | Query time when the filter has no QueryTimeout. | Now also limits the wait in the client queue |
features.maximumFileSize | Server configuration | MiB. A value below 1 is ignored. | 50,000,000 bytes (client default) | A larger document opens read-only. At check-in the client only warns; the server decides. | Changed: the value is validated. A text value no longer blocks all check-ins. |
features.recommendedDesktopVersion | Server configuration | Version | None | Highest version that “Check for updates” offers. | Now also limits the manual check of the publicly released build |
ForceClose | Installer command line | 0 or 1 | 0 | 1: ends a running Lime that does not close when asked, also in a full UI installation. | New |
LaunchLime | Installer command line | 0 or 1 | 0 | 1: starts Lime as the logged-on user after a passive or quiet installation. | Changed: Lime now starts after all packages, through TinyLauncher.exe |
DisableAutoUpdate | Installer command line | 0 or 1 | 0 | 1: the Lime Maintenance Service is not installed and the update add-in is not loaded. | Unchanged |
Value names for Application\Options\HiddenSettings:
- Misc page:
MiscOptionsPage.ConfirmQuit,MiscOptionsPage.ShowTodo,MiscOptionsPage.EnableInspectorFullTextSearch,MiscOptionsPage.ShowDocumentOpenOptions,MiscOptionsPage.ShowInsight,MiscOptionsPage.SearchRecipients,MiscOptionsPage.UseChromium,MiscOptionsPage.UseTimezoneConversion,MiscOptionsPage.DimFieldsIfNULL,MiscOptionsPage.PreferWebClient,MiscOptionsPage.AllowWebClient,MiscOptionsPage.UseRelevanceScoring,MiscOptionsPage.IncludeClassFilters,MiscOptionsPage.IncludeClassViews. - Explorers page:
ExplorersOptionsPage.UseTooltipForTruncatedValues,ExplorersOptionsPage.KeepTextFilter,ExplorersOptionsPage.PreviewInspectorTabContents.
Example: disable edit locks for all file types for one user.
reg add "HKCU\Software\Lundalogik\Lime\Settings\Custom\Application\FileExtensions\*.*" /v NoLock /t REG_DWORD /d 1 /f
Filter diagnostics
| Tool | How to open | What it shows |
|---|---|---|
| Filter validation report | Filter dialog > Advanced > Validate filter… | An HTML report in a dialog. The client combines the filter with the current source of the list, as Preview hit count does. |
| Copy filter as XML | Hold Shift and right-click the filter bar of a list (the menu with Reset filter, Ctrl+0) > Copy Filter (XML). Or right-click a filter in the filter list dialog > Copy Filter (XML). | The raw filter, the evaluated filter and the query, as XML. |
IFilter.BuildDescription(Class, Flags) | VBA or COM | A text that depends on Flags, see the table below. |
| DebugView | Sysinternals DebugView, same user as Lime | A line for each filter condition that the client drops because the field does not exist: Filter compatibility: dropping inaccessible field, condition replaced with dummy., followed by the class, field, operator and value type. |
Values for Flags (FilterDescriptionEnum):
| Name | Value | Result |
|---|---|---|
lkFilterDescriptionRaw | 0x01 | Raw filter XML |
lkFilterDescriptionEvaluated | 0x02 | Evaluated filter XML |
lkFilterDescriptionQuery | 0x04 | Query XML |
lkFilterDescriptionAllXml | 0x07 | All three XML parts |
lkFilterDescriptionReadable | 0x10 | Text summary |
lkFilterDescriptionAll | 0x17 | Text summary and all XML. Does not include the report. |
lkFilterDescriptionBreakdown | 0x20 | The validation report as one HTML document |
Parts of the validation report:
| Part | Content |
|---|---|
| Header | Status, and the record count for each stage: Backend (optimised), Backend (un-optimised), Client composed. A stage that did not run shows “(not run)”. |
| Filter structure | Two trees: Filter as you wrote it and Filter after the system rewrote it. Fields and options have their names. Each top-level sub-filter shows its own count. |
| Eliminated conditions | A condition that the optimiser removes has a dashed amber frame and the badge “(eliminated by optimiser)”. The tooltip names the rule. Typical cases: two “not in” conditions joined with OR, two “in” conditions joined with AND over different values, or an empty value list. |
| Differences | Differences between the stages |
| Technical details | Step timings, notes, and the origin of merged sub-filters |
| Diagnostics | The log of decisions during sub-filter merge and SQL generation. For the OR/AND case the log adds a hint, for example “If the intent was to exclude both values, the surrounding group should be ALL OF (AND), not ANY OF (OR)”. In a merged sub-filter the same case is logged as Info, not Warning. A “not in” condition is also checked by a second route. When the excluded and kept records do not cover the record type exactly, the report says so and lists the record ids. |
| Values of persons | A value that points to a person or coworker shows the id and the type only, for example “60201 (Coworker - hidden for privacy)”. |
| XML | The filter XML before and after the rewrite |
| Buttons | Copy report, Copy HTML, Copy JSON |
Query time limit (QueryTimeout):
- The limit is the filter's
QueryTimeout. Without it, the client usesfeatures.databaseTimeout(default 60 seconds). - The limit covers the wait in the client queue and the server command.
- When the limit is used up in the client queue, the error text is: “Wall-clock timeout expired while waiting in the client-side query queue; request was never sent to the server. Retry later, or raise the QueryTimeout if this is expected to take longer than configured.”
- An option query that the client generates (no option query in the field definition) has a limit of 1 second. A defined option query has 10 seconds.
Document handling
Edit locks
| Item | Fact |
|---|---|
| Lock at check-out | The client takes an edit lock when a user opens a document for editing. A colleague then gets the document read-only. NoLock disables this, see the settings table. |
| Lock refresh | A background thread in lime.exe confirms the lock to the server every 20 minutes while the user holds locks. Without locks it runs every 60 minutes. |
| Release of old own locks | Shortly after login (first background pass) and at exit. The client releases a lock only when all of these are true: the server says the active user holds it, this process does not use it, the document folder has a .local.json file, and the document file is no longer in the folder. A lock that another computer holds is not released. Needs the server file API. |
| Lock after save of the record | The client takes the lock again directly after a record with an open document is saved. |
| Predefined filters | Built in memory for each record type with a document field. They are not saved on the server. [Locked - mine]: all users. [Locked - all], [Locked - stale] and the view [Lock details]: administrators only. “Stale” means a lock time before the start of yesterday. |
| Release command | Right-click a record > Document > Force unlock. The same command is in the Document toolbar menu and in the menu of the document field. |
| Rights | A user can release an own lock. An administrator can also release the lock of another user. The client always asks for confirmation and shows the owner and the age of the lock. The server makes the final decision. |
Unsent documents
| Item | Path or fact |
|---|---|
| Documents folder | <WorkingFolder>\Documents\<user>. This is not the Windows Documents folder. |
| Check-out folder | <WorkingFolder>\Documents\<user>\<document id>, when the server has the file API |
| Record of a failed save | .local.json in the check-out folder. A JSON object with keys such as lde.push.status, lde.push.class, lde.push.hresult, lde.push.http, lde.push.attempts, lde.push.first.utc, lde.push.last.utc. |
| Failure classes | retryable, permanent, blocked, unknown. The dialog shows “Not sent yet” for a checked-out document that was not sent. |
| Preservation folder | <WorkingFolder>\Documents\<user>\_failed\<document id>. When the name exists, the client adds -yyyymmdd-hhmmss. |
When a folder moves to _failed | At the next login. The client first tries to send the document again. It moves the whole check-out folder. It does not move a document that is open in another program. A permanent failure is not sent again unless the file changed. An unknown failure is not sent again after 5 attempts. |
| Notification | After login (see Application\UnsentDocumentsScanDelay), 5 minutes after login, and at exit. |
| Dialog | Tools > Unsent documents… Commands: Open, Open folder, Save a copy, Copy path, Copy details, Retry, Discard (always asks), Replace in CRM (administrators only). |
| API | Database.GetUnsentDocuments() returns XML. Paths are relative and contain no user name. |
| Cleanup at close | The client removes empty check-out folders and folders that contain only Office owner files (~$…). This also applies inside _failed. |
| Favorites cache | <WorkingFolder>\Caches\favorites.<database id>.<user id>.cache. The client deletes the old file <WorkingFolder>\favorites.<database id>.<user id>.cache at login. |
Read-only because of size
- The limit comes from the server configuration
features.maximumFileSize(MiB). Without a valid value, the client uses 50,000,000 bytes. - A larger document opens read-only. The message is: “This document is %1 MB. It has been opened read-only, so changes cannot be saved back to Lime CRM. A document larger than the size this client can send is always opened read-only.”
- When the size is not known, the client shows a general read-only message.
- At check-in of a larger document, the error is: “The document is too large to be saved in Lime.”
File-security prompts
All launches through Application.Shell, action pads, field links, content links and the phone dialer use one check. The order of the rules:
| Target | Result |
|---|---|
Verb runas or runasuser, or a verb in ShellVerbBlockList | Always blocked |
Verb that is not open, openinprivate, openas, edit, print, printto, explore, find, properties or empty, and not in ShellVerbAllowList | Risky |
File path with a program or script extension (30 extensions, for example .exe, .cmd, .ps1, .vbs, .msi, .lnk, .url), or a command name without a path | Risky |
| Folder, or a path that cannot be resolved now (for example a share that is not reachable) | Allowed without a check. Windows handles it as before. |
Document file that Windows attachment policy would warn about (IAttachmentExecute::CheckPolicy returns S_FALSE) | Risky |
| Document file that Windows attachment policy blocks | Always blocked |
Scheme in ShellSchemeBlockList | Always blocked |
Scheme ms-msdt, search, search-ms, ms-officecmd, ms-cxh, ms-cxh-full, ms-appinstaller, hcp, res, vbscript, javascript or shell | Always blocked. The allow list cannot change this. |
Scheme in ShellSchemeAllowList | Allowed |
Scheme whose registered handler is a system tool such as powershell.exe, cmd.exe, mshta.exe or rundll32.exe (16 programs) | Risky |
| Any other scheme (http, https, mailto, tel, Teams, Slack and others) | Allowed |
A risky target gives a prompt in the user's language. With ShellGateHardBlock set, or when the client has no visible window (for example unattended automation), a risky target is blocked and no prompt is shown.
Save as… and opening a document from a document field use their own check: IAttachmentExecute::CheckPolicy and AssocIsDangerous. When the file is unsafe, the client shows the same kind of prompt. These two paths do not read the HKLM\…\Lime\Security values.
Support and debugging
Debug output (DebugView)
Use Sysinternals DebugView as the same Windows user as Lime. Each line starts with a fixed prefix:
| Prefix | Area |
|---|---|
Login: AllowSingleSignOnUsingOSPrimaryAccount= | The setting “use primary Windows login” in the login dialog |
WebView2.Environment: | WebView2 runtime version, fixed version, SSO option, browser data folder |
WebView2.Profile: | Browser profile name |
WebView2.DeviceJoin: | Once per process: domain join, Entra join type, Entra device ID and tenant ID. No user name or e-mail address. Compare with dsregcmd /status and the Entra sign-in log. |
[DdeCommand] | Parse and dispatch of limecrm: links and DDE commands |
[UrlDecoder] | Link URL before and after decoding, and the decode mode |
LinkClick: | Link clicks in text fields |
Application.Shell gate: | Each launch decision: scheme, and “allowed” or the reason for a block |
Filter compatibility: | Filter conditions that the client drops |
Shutdown: | Steps at exit: “Close accepted”, “Background threads signalled”, “Logged out”, “VBA shut down”, “Frame closed”, “ExitInstance”. The same lines are Sentry breadcrumbs. |
WorkDlg: | Background operations with a progress dialog: “Job started”, “Jobs finished”, “Job failed”. The same lines are Sentry breadcrumbs. |
CLockMonitor::, CDocumentEx::Heartbeat: | Edit-lock refresh |
FavoritesCache.Load: | Problems with the favorites cache file |
Sentry reports from the client
| Event | When |
|---|---|
| “Document content did not reach the server.” | A document could not be sent. Level error for a permanent failure, otherwise warning. Sent once for each change of the failure class. The data contains the file name, extension and size. |
| “Unsent document content could not be preserved.” | The move to _failed failed |
| Summary of the login sweep | Unsent documents were found at login |
| “Application.Shell blocked a launch in a non-interactive context.” | A risky launch was blocked because no prompt could be shown |
| Errors in limecrm: links | The event contains the link URL, also when another Lime instance forwarded the link |
Setup and service logs
| Program | Log location |
|---|---|
VBA setup (setupVBA.exe, always elevated) | %WINDIR%\Logs\Lime\setupVBA\<yyyymmdd-hhnnss>\. Files: setupVBA-run.log, last-run.txt, one log per MSI, install-vcredist2010_x86.html. When the folder cannot be created: the temporary folder. |
TinyLauncher.exe (starts setupVBA and Lime after an update) | Elevated: %WINDIR%\Logs\Lime\TinyLauncher.log. Not elevated: %ProgramData%\Lime\Setup\TinyLauncher.log. |
Service update package (setupMaintenanceService.exe) | Elevated: %WINDIR%\Logs\Lime\MaintenanceServiceUpdate\<yyyymmdd-hhnnss>\. Not elevated: %ProgramData%\Lime\Setup\MaintenanceServiceUpdate\<yyyymmdd-hhnnss>\. Files: run.log, LimeMaintenanceService.msi.log. |
| Installer (Burn bundle) | %TEMP% by default. Use /log <file> for a fixed path. |
| Installer failure report | %WINDIR%\Logs\Lime\SetupDiagnostics\SetupDiagnostics-<utc>.log or the folder of the bundle log, only when the report could not be sent |
| Lime Maintenance Service | Windows Application event log, source LimeMaintenanceService |
Event log of the Lime Maintenance Service
| Id | Level | Meaning |
|---|---|---|
| 1000 | Information | Request received: command, client, arguments |
| 1001 | Information | Installer started as LocalSystem: session, process, requested file, started copy, SHA-256, signer, Burn engine version, arguments |
| 1002 | Warning | Request refused: unknown command, failed validation, or failed process start |
| 1003 | Warning | Requested arguments that the service did not pass on |
Installer failure report
When an installation fails, the bundle package diagnostics.exe sends a report to Sentry. It runs on rollback, not on uninstall.
- Tags:
action,failed_package,result,ui,previous_version,burn,os.build,os.64bit. - Extra data:
first_error,command_line. - Attachments: the bundle logs; the newest setupVBA and MaintenanceServiceUpdate log folders in both log locations (up to 10 files each);
TinyLauncher.log;MicrosoftEdgeUpdate.log; the LimeMaintenanceService events. Logs are cut to the last 1 MB.
Commands for support
| Task | Command |
|---|---|
| Read the service events | See the PowerShell command below this table |
| Run the installer with a log | <installer>.exe /passive /norestart /log “C:\Temp\LimeSetup.log” |
| Same, and end a Lime that does not close | <installer>.exe /passive /norestart ForceClose=1 /log “C:\Temp\LimeSetup.log” |
| List the setup logs | Get-ChildItem “$env:WINDIR\Logs\Lime”, “$env:ProgramData\Lime\Setup” -Recurse |
| Check the service | Get-Service LimeMaintenanceService and sc.exe qc LimeMaintenanceService |
| Check the service update record | reg query “HKLM\SOFTWARE\WOW6432Node\Lime\MaintenanceServiceUpdate” |
| Check the WebView2 runtime version | reg query “HKLM\SOFTWARE\WOW6432Node\Microsoft\EdgeUpdate\Clients\{F3017226-FE2A-4295-8BDF-00C3A9A7E4C5}” /v pv |
| Check the device join state | dsregcmd /status |
| Show client settings of a user | reg query “HKCU\Software\Lundalogik\Lime\Settings” /s |
Read the events of the Lime Maintenance Service (PowerShell):
Get-WinEvent -FilterHashtable @{ LogName = 'Application'; ProviderName = 'LimeMaintenanceService' } -MaxEvents 50 | Format-List TimeCreated, Id, LevelDisplayName, Message
Installation and update
Requirements
| Component | Fact |
|---|---|
| Windows | The bundle condition is VersionNT >= v6.1 (Windows 7 or later). |
| .NET Framework 4.7.2 | The bundle contains the WiX package group NetFx472Redist. It installs .NET Framework 4.7.2 when it is missing. |
| WebView2 Runtime | Detected through HKLM\SOFTWARE\Microsoft\EdgeUpdate\Clients\{F3017226-FE2A-4295-8BDF-00C3A9A7E4C5}, value pv, 32-bit registry view. The runtime counts as installed when pv has a value that is not 0.0.0.0. A per-user runtime does not count. Otherwise the bundle runs MicrosoftEdgeWebview2Setup.exe /silent /install (per machine). In 11.2 the bundle checked only that the key existed. |
| VBA 7.1 | setupVBA.exe (Inno Setup) installs Vba71.msi and Vba71_1033.MSI with msiexec /quiet /norestart. The bundle starts it after the main package through TinyLauncher.exe with /verysilent (/verysilent /repair for a repair). |
| Visual C++ 2010 runtime (x86) | setupVBA.exe runs vcredist2010_x86.exe (10.0.40219.325) with /q /norestart at every run. Setup fails when msvcr100.dll in SysWOW64 is older than 10.0.40219.325 afterwards. |
| Other Visual C++ runtimes | None. 11.2 installed the Visual C++ 2015-2022 x86 redistributable (14.38.33130) and the VC++ 2010 merge module. 11.3 installs neither. |
Signing
- The build signs every
.exe,.dll,.ocx,.msi,.sys,.cpland.scrfile in the output of the client MSI and the service MSI. It uses SHA-256 and a timestamp. - A file that already has a valid, timestamped signature from its vendor keeps that signature.
setupVBA.exe,TinyLauncher.exe, the three MSI files, the service update package, the Burn engine and the bundle are also signed.- Smart App Control in Windows 11 blocks programs and libraries that are not signed. With these signatures it no longer blocks the client.
Running applications during installation
| Case | Behaviour |
|---|---|
| Full UI | The client MSI uses the Windows Restart Manager. The installer lists the running applications and asks the user to close them. |
Passive or quiet (automatic update, or /passive or /quiet by hand) | Running applications are closed without a question. A Lime that does not close when asked is ended (MSI property MSIRMSHUTDOWN = 1). |
ForceClose=1 | Same as passive also in a full UI installation: a Lime that does not close is ended. |
| Client MSI run alone, without the bundle | MSIRMSHUTDOWN is set only when FORCECLOSE=1 is passed. |
| Windows logoff or shutdown that is cancelled | Lime keeps running. Lime closes only when the session really ends. |
Restart
| Component | Fact |
|---|---|
| Client MSI and service MSI | REBOOT=Suppress |
| Lime Maintenance Service | Always adds /norestart to the installer arguments |
| Update add-in | Starts the installer with /passive /norestart (before: /promptrestart /passive) |
| Product repair from Lime | /repair /passive /norestart LaunchLime=1 |
setupVBA.exe | Passes /norestart to msiexec and to the VC++ 2010 setup. Result 3010 counts as success and is written to the log. |
Installer command-line variables
Syntax: <installer>.exe Name=Value.
| Variable | Type | Default | What it does | Status |
|---|---|---|---|---|
InstallFolder | String | [ProgramFilesFolder]Lundalogik | Base folder. The client goes to <InstallFolder>\Lime CRM, the service to <InstallFolder>\Lime Maintenance Service. | Unchanged |
LIMELANGUAGE | String | windows | Written to HKLM\SOFTWARE\Lundalogik\Lime\DefaultLanguage | Unchanged |
LIMESERVER | String | Empty | Default server | Unchanged |
LIMEDATABASE | String | Empty | Default database | Unchanged |
LIMEAUTOLOGIN | Number | 0 | Default for automatic login | Unchanged |
LIMEHTTPSPORT | Number | 443 | Default HTTPS port | Unchanged |
HOSTING | Number | 0 | Hosted installation | Unchanged |
LaunchLime | Number | 0 | 1: start Lime as the logged-on user after a passive or quiet installation, after all packages | Changed: started by LaunchLime.exe (TinyLauncher) as the last package |
DisableAutoUpdate | Number | 0 | 1: the Lime Maintenance Service is not installed and the update add-in does not load | Unchanged |
DisableUsageReport | Number | 0 | Written to HKLM\Software\Lundalogik\Lime\UsageFeedback\Disable | Unchanged |
ForceClose | Number | 0 | 1: end a Lime that does not close when asked, also with full UI | New |
Lime Maintenance Service
| Item | Fact |
|---|---|
| Service name | LimeMaintenanceService. Version line 12.0.<build>, with the build number of the 11.3 release. |
| Accepted arguments | /passive, /quiet, /silent, /verysilent, /repair, /suppressmsgboxes, /norestart, LaunchLime=0 or LaunchLime=1. Other arguments are dropped (event 1003). A request without an unattended switch is refused. /norestart is always added. |
| Checks before start | The file exists. The service copies it to <service folder>\Run\<guid>, where only LocalSystem and Administrators have access. The copy must have a valid signature from Lime Technologies Sweden AB, Lund, SE. The original file name must start with “setup”. A Burn bundle must use Burn engine 3.14.1 or later. |
| Run | As LocalSystem in the user's session, with TEMP and TMP set to <service folder>\Temp. Run folders older than 1 day are removed. |
| Disable for tests | HKLM\SOFTWARE\WOW6432Node\Lundalogik\Lime Maintenance Service, DWORD Disabled not 0. Or set the service start type to Disabled. |
Service update package
| Item | Fact |
|---|---|
| File | setupMaintenanceService.exe |
| Purpose | Updates an installed Lime Maintenance Service to the version of this release. It never installs, removes or downgrades the service. |
| Without administrator rights | It asks the installed service to run it. When that does not work within 120 seconds, it asks for elevation (UAC). |
| Old vulnerable service | A service older than 12.0.4710.0 that cannot be updated is stopped and disabled. |
| Record | HKLM\SOFTWARE\WOW6432Node\Lime\MaintenanceServiceUpdate: PatchedVersion, PatchedFromVersion, PatchedAt. After a disable also DisabledAt and DisabledReason. |
| Exit codes | 0: updated, passed to the service or elevated instance, or already current. 1: service not installed, UAC cancelled, or installation failed. 2: the service could not be updated and was disabled. |