Skip to content

Error 1923 during service installation gives misleading "insufficient privileges" message when service account does not exist #5592

@DataTraveler1

Description

@DataTraveler1

Update 2026-03-13: Full analysis and tested fix posted in the comments further below 👇

Description of Issue


Summary

When the SERVICEACCOUNT property is set to an account that does not exist on the target machine, the installer fails with Error 1923 and the message:

"Service 'PowerShell Universal' (PowerShellUniversal) could not be installed. Verify that you have sufficient privileges to install system services."

This message is incorrect and misleading. The install is running fully elevated (Privileged = 1, MsiRunningElevated = 1). The actual cause is that the Windows Service Control Manager (SCM) could not resolve the supplied account name and returned a failure to CreateService, which Windows Installer surfaces generically as Error 1923 regardless of the underlying reason.


Product

PowerShell Universal
Version: 26.1.3
Manufacturer: Devolutions, Inc.
Package: Devolutions.PowerShellUniversal.2026.1.3.0.msi


Steps to Reproduce

  1. Launch the MSI installer interactively (double-click or msiexec /i).
  2. Proceed through the wizard until the service account input screen.
  3. Enter a service account that does not exist on the machine or domain (e.g. contoso\psu_service where the account is absent).
  4. Enter any password and click Next / Install.
  5. Observe the failure dialog at the service installation step.

Note: A verbose log was captured in parallel using:

msiexec /i Devolutions.PowerShellUniversal.2026.1.3.0.msi /l*v install-failed.log

The /l*v flag does not affect installer behavior — it was added solely for diagnostics.


Expected Behavior

The installer should detect that the supplied service account cannot be resolved before attempting service creation, and present a clear, actionable message such as:

"The service account 'nonexistent-domain\psu_service' could not be found. Please verify the account name and try again."

The user should be returned to the setup dialog without a full rollback.


Actual Behavior

  • Installation proceeds through all file copy and custom actions successfully.
  • At the InstallServices action, CreateService is called with StartName=nonexistent-domain\psu_service.
  • The SCM rejects the account and returns a failure.
  • Windows Installer wraps this as Error 1923 with a misleading privileges message.
  • A full rollback is triggered, removing all previously copied files.
  • Exit code: 1603

Relevant log extract:

Executing op: ServiceInstall(Name=PowerShellUniversal, ..., StartName=contoso\psu_service, ...)
Error 1923. Service 'PowerShell Universal' (PowerShellUniversal) could not be installed.
  Verify that you have sufficient privileges to install system services.
Action ended: InstallFinalize. Return value 3.
MainEngineThread is returning 1603

Impact

  • The misleading message causes users and IT admins to investigate elevation/UAC issues that are not present.
  • The full rollback means all installer progress is lost; the user must re-run from scratch after fixing the account.
  • Silent installs (/qn) in enterprise/pipeline deployments produce only the cryptic 1923 in the MSI log with no indication that the account name is wrong.

Suggested Fix

Option A — Improve the Error 1923 message (low effort)

Override row 1923 in the MSI Error table with a more accurate message that mentions account validity as a possible cause alongside privileges.

Option B — Pre-flight validation CA in InstallUISequence (recommended for interactive installs)

Add an immediate C# DTF custom action scheduled just before ExecuteAction that calls:

new NTAccount(serviceAccount).Translate(typeof(SecurityIdentifier));

If IdentityNotMappedException is thrown, surface a clear error and return the user to the dialog with no rollback required.

Option C — Deferred validation CA in InstallExecuteSequence (recommended for silent/enterprise installs)

Add a deferred C# DTF custom action immediately before InstallServices in InstallExecuteSequence, performing the same NTAccount.Translate() check. This fires regardless of UI level (/qn, SCCM, Intune) and produces a named, descriptive failure in the MSI log.

⚠️ Exact sequence numbers for InstallServices and the correct dialog/control name for Option B wiring are pending confirmation from the MSI database (Orca). Will update before final submission.

Production recommendation: ship Options B + C together.


Attachments

  • install-failed.log — verbose MSI log of the failing install
  • install-succeed.log — verbose MSI log of a successful install using a valid service account

Environment

  • OS: Windows Server (64-bit)
  • Machine role: Domain Controller (WIN-DC-01) — relevant because DC security policy and Group Policy may impose additional constraints on service account rights vs. a standard member server
  • Install path: C:\Program Files (x86)\Universal\ — this is a 32-bit MSI running on a 64-bit OS, which is expected; noted here in case it is relevant to path handling
  • Install context: elevated (SYSTEM via msiexec service), Privileged = 1, MsiRunningElevated = 1 confirmed in log
  • Domain environment: yes
  • Failed run service account: contoso\psu_service (account does not exist)
  • Successful run service account: contoso3\psu_service (valid account, install succeeds)
  • Both runs used the same MSI, same machine, same install options

Version

26.1.3

Severity

Low

Hosting Method

MSI (Windows Service)

Operating System

Windows

Database

SQLite

Licensed

Yes

Features

No response

Additional Environment data

No response

Screenshots/Animations

Image

Metadata

Metadata

Assignees

No one assigned

    Labels

    v5Version 5 issue.

    Type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions