Skip to content

fix(windows): add non-admin user install with different base keyboard - #16528

Open
rc-swag wants to merge 8 commits into
fix/windows/15152/basekeyboard-user-not-adminfrom
fix/windows/15152/basekeyboard-install-non-admin-2
Open

fix(windows): add non-admin user install with different base keyboard#16528
rc-swag wants to merge 8 commits into
fix/windows/15152/basekeyboard-user-not-adminfrom
fix/windows/15152/basekeyboard-install-non-admin-2

Conversation

@rc-swag

@rc-swag rc-swag commented Sep 4, 2026

Copy link
Copy Markdown
Contributor

Fixes: #15152

This change if for installing keyboards when the basekeyboard is different the admin user used for elevation. The keyboards are compiled against the correct basekeyboard for the calling user.

This has required a update to the kmcom interface for the Install interfaces for keyboards and packages to include the basekkeyboard KLID as an argument.

Build-bot: release:windows

User Testing

TEST_INSTALL_CURRENT_USER_NON_ADMIN_DIFFERENT_BASE

  1. Login into Windows with and account that is a "standard" user and does not have "Administrator" rights.
  2. Open Keyman Configuration -> Options
  3. Press the Base Keyboard button and select a different base keyboard then the User with Admin. e.g. German
  4. Open Keyman Configuration -> Keyboard Layouts
  5. Install a keyboard for example sil_ipa
  6. Check C:\ProgramData\Keyman\Keyman Engine\Keyboard\_Package\sil_ipa there should now be a sil_ipa-????0407-d.kmx and sil_ipa-????0407.kmx

TEST_INSTALL_CURRENT_USER_ADMIN_DIFFERENT_BASE

After completing the steps in TEST_INSTALL_CURRENT_USER_NON_ADMIN_DIFFERENT_BASE
1.Login into Windows with and account that is a "admin" user and does have "Administrator" rights.

  1. Open Keyman Configuration -> Options
  2. Press the Base Keyboard button and select a different base keyboard then the non-admin user with out Admin. e.g. Czech
  3. Open Keyman Configuration -> Keyboard Layouts
  4. Install another keyboard euro_latin
  5. Check a Czech mcomplied kmx is there i.e. C:\ProgramData\Keyman\Keyman Engine\Keyboard\_Package\sil_euro_latin sil_euro_latin-????0405-d.kmx and sil_euro_latin-????0405.kmx

TEST_INSTALL_CURRENT_USER_NON_ADMIN_DIFFERENT_BASE_VIA_FILE

  1. Login into Windows with and account that is a "standard" user and does not have "Administrator" rights.
  2. Open Keyman Configuration -> Options
  3. Press the Base Keyboard button and select a different base keyboard then the User with Admin. e.g. German
  4. Download a keyboard package for example gff_amharic.kmp
  5. Doulble click on the kmp file to install it.
  6. Check C:\ProgramData\Keyman\Keyman Engine\Keyboard\_Package\gff_amharic there should now be a gff_ahmharic-????0407-d.kmx and gff_ahmharic-????0407.kmx

The updates all the apis so that the basekeyboardid or klid
can be passed in as an argument. This in needed so that
elevated process required to compile the keyboard has
the call users keyboard base id.
@github-project-automation github-project-automation Bot moved this to Todo in Keyman Sep 4, 2026
@keymanapp-test-bot keymanapp-test-bot Bot added the user-test-missing User tests have not yet been defined for the PR label Sep 4, 2026
@keymanapp-test-bot

keymanapp-test-bot Bot commented Sep 4, 2026

Copy link
Copy Markdown

User Test Results

Test specification and instructions

  • TEST_INSTALL_CURRENT_USER_NON_ADMIN_DIFFERENT_BASE (PASSED) (notes)
  • TEST_INSTALL_CURRENT_USER_ADMIN_DIFFERENT_BASE (PASSED) (notes)
  • TEST_INSTALL_CURRENT_USER_NON_ADMIN_DIFFERENT_BASE_VIA_FILE (PASSED) (notes)

Test Artifacts

@keymanapp-test-bot keymanapp-test-bot Bot added has-user-test user-test-required User tests have not been completed and removed user-test-missing User tests have not yet been defined for the PR labels Sep 7, 2026
@rc-swag
rc-swag marked this pull request as ready for review September 8, 2026 01:40
@Meng-Heng

Meng-Heng commented Sep 9, 2026

Copy link
Copy Markdown
Contributor

Test Specs

  1. Windows 10 Bootcamp
  2. Keyman for Windows 19.0.268-alpha-test-16528

Test Prerequisites

  1. Login into Windows with an account that is a "standard" user and does not have "Administrator" rights.

Test Results

  • TEST_INSTALL_CURRENT_USER_NON_ADMIN_DIFFERENT_BASE (PASSED):
  1. Switch to Non-admin account
  2. Start Keyman -> Open Keyman Configuration -> Options
  3. Press the Base Keyboard button
  4. Select Yoruba as the Base keyboard
  5. Open Keyman Configuration -> Keyboard Layouts
  6. Install the sil_ipa
  7. VERIFIED: C:\ProgramData\Keyman\Keyman Engine\Keyboard\_Package\sil_ipa has sil_ipa-0000046A-d.kmx and sil_ipa-0000046A.kmx
  • TEST_INSTALL_CURRENT_USER_ADMIN_DIFFERENT_BASE (PASSED):
  1. Switch to Admin account
  2. Start Keyman -> Open Keyman Configuration -> Options
  3. Press the Base Keyboard button
  4. Select Czech as the Base keyboard
  5. Open Keyman Configuration -> Keyboard Layouts
  6. Install the sil_euro_latin
  7. VERIFIED: a Czech mcomplied kmx is there - C:\ProgramData\Keyman\Keyman Engine\Keyboard\_Package\sil_euro_latin has sil_euro_latin-00000405-d.kmx and sil_euro_latin-00000405.kmx
  • TEST_INSTALL_CURRENT_USER_NON_ADMIN_DIFFERENT_BASE_VIA_FILE (PASSED):
  1. Switch to Non-admin account
  2. Start Keyman -> Open Keyman Configuration -> Options
  3. Press the Base Keyboard button
  4. Select German as the Base keyboard
  5. Install gff_amharic KMP file -> Click once to install
  6. VERIFIED: C:\ProgramData\Keyman\Keyman Engine\Keyboard\_Package\gff_amharic has gff_ahmharic-00000407-d.kmx and gff_ahmharic-00000407.kmx

@keymanapp-test-bot keymanapp-test-bot Bot removed the user-test-required User tests have not been completed label Sep 9, 2026
@rc-swag rc-swag self-assigned this Sep 11, 2026
@rc-swag
rc-swag requested a review from mcdurdin September 11, 2026 01:21
with TKPInstallKeyboard.Create(Context) do
try
Execute(FFileName, '', [], nil, Force);
Execute(FFileName, '', [], nil, Force, 0);

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
Execute(FFileName, '', [], nil, Force, 0);
Execute(FFileName, '', [], nil, Force, 0);

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

Status: Todo

Development

Successfully merging this pull request may close these issues.

3 participants