====== 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: * ''.'': the server name and the database name, as the client writes them in the registry key name. * '''': the local working folder of the database. The default is ''%LOCALAPPDATA%\Lundalogik\Lime\Databases\.''. With the database setting ''UseRoamingWorkingFolder'' = 1, the client uses ''%APPDATA%'' instead. * '''': 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\''. These are the values the user saves, for example in the Options dialog. - ''HKCU\Software\Lundalogik\Lime\Settings\Default\''. 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\''. 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 '''' as written. * **Database scope**: the key is ''Databases\.\''. The value applies to one database only. Some settings are inherited. The client then reads ''Application\'' 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\\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\'' | 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\\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\\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 uses ''features.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 | ''\Documents\''. This is not the Windows Documents folder. | | Check-out folder | ''\Documents\\'', 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 | ''\Documents\\_failed\''. 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 | ''\Caches\favorites...cache''. The client deletes the old file ''\favorites...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\\''. 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\\''. Not elevated: ''%ProgramData%\Lime\Setup\MaintenanceServiceUpdate\\''. Files: ''run.log'', ''LimeMaintenanceService.msi.log''. | | Installer (Burn bundle) | ''%TEMP%'' by default. Use ''/log '' for a fixed path. | | Installer failure report | ''%WINDIR%\Logs\Lime\SetupDiagnostics\SetupDiagnostics-.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 | ''.exe /passive /norestart /log "C:\Temp\LimeSetup.log"'' | | Same, and end a Lime that does not close | ''.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'', ''.cpl'' and ''.scr'' file 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: ''.exe Name=Value''. ^ Variable ^ Type ^ Default ^ What it does ^ Status ^ | ''InstallFolder'' | String | ''[ProgramFilesFolder]Lundalogik'' | Base folder. The client goes to ''\Lime CRM'', the service to ''\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., 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 ''\Run\'', 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 ''\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. |