Automatic launch of non-UWP application in kiosk mode with autologon

dev 0 Reputation points
2025-11-08T23:10:33.55+00:00

I created an executable (app.exe) that needs to be started automatically on a kiosk-mode workstation with autologon enabled. Issues encountered:

app.exe does not run correctly under non-administrator accounts: the launch fails or the application freezes when executed under standard kiosk-restricted users. I need app.exe to launch automatically only for the kiosk user.

When using Windows Configuration Designer to configure Shell Launcher, the shell change is also applied to the administrator account, forcing me to manually restore explorer.exe every time I log in as admin. I am requesting support on two items: ensuring app.exe can run under a standard kiosk user account, and configuring automatic startup of the application exclusively for the kiosk user without affecting the administrator profile

Windows development | Windows API - Win32
{count} votes

1 answer

Sort by: Most helpful
  1. Danny Nguyen (WICLOUD CORPORATION) 5,065 Reputation points Microsoft External Staff Moderator
    2025-11-12T08:12:14.41+00:00

    Hi,

    Since your app runs for admin but fails or freezes for a standard kiosk user, it could have been caused by:

    • App requires elevated rights (manifest set to requireAdministrator or trying privileged operations).
    • Writes to or expects write access in protected locations (e.g. C:\Program Files, HKLM, or system folders) causing silent failures under limited user.
    • Access denied on files/registry during initialization (unhandled exceptions lead to apparent “freeze”).
    • Attempts to start/communicate with a service or driver that isn’t installed or accessible to a standard user.
    • Uses global hooks, low‑numbered ports, or other privileged APIs that fail without elevation.
    • Hardcoded paths instead of per-user %LOCALAPPDATA% or %PROGRAMDATA%, resulting in missing resources or locked files.

    Confirm by running the app as the kiosk user and using Process Monitor filtered to app.exe to spot ACCESS DENIED events.

    I suggest trying the steps below:

    1. Make the app run under the kiosk (standard) user:
      • Change manifest to use asInvoker (not requireAdministrator).
      • Move or redirect all writable data to %LOCALAPPDATA%\YourApp or %PROGRAMDATA%\YourApp.
      • Grant Modify permission to Users only where truly needed.
      • Test and fix any ACCESS DENIED outcomes found via ProcMon.
    2. Assign the custom shell only to the kiosk user (keep Explorer for everyone else):
      • Ensure default shell is explorer.exe.
      • Map your app as shell for just the kiosk user SID.
      
         $namespace = "root\standardcimv2\embedded"
      
         $user = "KioskUser"
      
         $sid = (New-Object System.Security.Principal.NTAccount($user)).Translate([System.Security.Principal.SecurityIdentifier]).Value
      
         # Default shell for all other users
      
         Set-CimInstance -Namespace $namespace -ClassName WESL_UserSetting -Property @{ UserSid="*"; Shell="explorer.exe" }
      
         # Custom shell for kiosk user only
      
         Set-CimInstance -Namespace $namespace -ClassName WESL_UserSetting -Property @{ UserSid=$sid; Shell="C:\Kiosk\App\app.exe" }
      
      

    Let me know if you have any update. I would love to help.

    1 person found this answer helpful.

Your answer

Answers can be marked as 'Accepted' by the question author and 'Recommended' by moderators, which helps users know the answer solved the author's problem.