Как запустить приложение в качестве замены оболочки на Windows 10 Enterprise

Мне нужно создать специальную учетную запись на компьютере под управлением Windows 10 Enterprise. Эта учетная запись запускает приложение непосредственно при входе в систему вместо оболочки по умолчанию, и выход из приложения должен заставлять компьютер перезагружаться.

Я смог сделать это легко в Windows 8.1 Embedded Industry Pro, используя консоль конфигурации и функции блокировки.

Теперь, в Windows 10, я пытаюсь выполнить два учебника по технике WESL_UserSetting и Настройте киоск в Windows 10 Pro, Enterprise или Education

Однако ни один из учебников не работает. Мне удалось выполнить сценарии, описанные в них, но они не имеют эффекта (я изменил их, чтобы они не удаляли набор оболочек).

Наконец, я получил следующий код:

$COMPUTER = "localhost"
$NAMESPACE = "root\standardcimv2\embedded"
$ACCOUNT_NAME = "cmp"

$ShellLauncherClass = [wmiclass]"\\$COMPUTER\${NAMESPACE}:WESL_UserSetting"


$NTUserObject = New-Object System.Security.Principal.NTAccount($ACCOUNT_NAME)
$NTUserSID = $NTUserObject.Translate([System.Security.Principal.SecurityIdentifier]).Value

$NTUser_Shell = Get-WmiObject -namespace $NAMESPACE -computer $COMPUTER -class WESL_UserSetting | 
    where {$_.Sid -eq $NTUserSID}

if ($NTUser_Shell) {
    "`Custom shell already set for [$ACCOUNT_NAME] removing it"
    $ShellLauncherClass.RemoveCustomShell($NTUserSID)
}

$restart_shell = 0
$restart_device = 1
$shutdown_device = 2

$ShellLauncherClass.SetCustomShell($NTUserSID, "cmd.exe", ($null), ($null), $restart_device)

"`nCurrent settings for custom shells:"
Get-WmiObject -namespace $NAMESPACE -computer $COMPUTER -class WESL_UserSetting | Select Sid, Shell, DefaultAction

Выполнение этого script в командной строке admin дает желаемый результат:

Custom shell already set for [cmp] removing it

Current settings for custom shells:

Sid                                            Shell   DefaultAction
---                                            -----   -------------
S-1-5-21-3842421150-1098587697-2315725148-1002 cmd.exe             1

Однако запись в качестве пользователя cmp просто показывает стандартную оболочку Windows 10.

Что я должен изменить, чтобы иметь возможность запускать программу вместо стандартной оболочки?

Ответы

Ответ 1

Вы пытались изменить оболочку пользователей?

https://msdn.microsoft.com/en-us/library/ms838576(v=WinEmbedded.5).aspx

Есть несколько ключей реестра, которые необходимо установить. Первый позволяет дать пользователю уникальную оболочку, вторая определяет исполняемый файл, который запускается вместо проводника.

Ответ 2

У меня была такая же проблема прямо сейчас. И да, Microsoft изменила способ замены оболочки. Вы можете установить и использовать Embedded Shell Launcher для настройки окон, как вам нравится, в режиме киоска. Но это доступно только для предприятий и образования.

Если вы не хотите покупать версию Enterprise, вы можете использовать уже известные разделы реестра в HKCU и HKLM. https://msdn.microsoft.com/en-us/library/ms838576(v=WinEmbedded.5).aspx

Но подождите, о нет, поскольку с Windows 10 можно использовать только Microsoft подписанные приложения, поэтому ваше обычное приложение .net не запускается, и экран остается черным после входа в систему. Но мы выяснили обходное решение.

Просто используйте пакетный файл в качестве начальной загрузки. Если вы установили ключи реестра, которые вам нравятся в Batch-File, и Batch-File запускает реальное приложение, то он работает как шарм.

@echo off
echo Bootstrapping, please wait ...
start /b "Bootstrap" "C:\vmwatcher\VMViewClientWatcher.exe"

Ответ 3

Я думаю, что вы правильно настроили пользовательскую оболочку для пользователя, но, возможно, вам нужно активировать поведение ShellLanuncher. Попробуйте это (в конце вашего script):

$ShellLauncherClass.SetEnabled($TRUE)

Таким образом, стандартная оболочка Windows 10 не запускается при входе в систему с другой учетной записью, но (по крайней мере, в моем случае) командная строка не запускается, а результат - черный.

Вы все еще можете запустить диспетчер задач и запустить там новую задачу, но я не понимаю, почему командная строка не запускается автоматически.

Ответ 4

Я сражался с этим сам. Если вы посмотрите на заметки для Windows 10 Shell Launcher, он работает только в версии Enterprise или Education. Если вы попытаетесь использовать это в версиях Home или Pro, он просто загрузится на пустой экран. Используя тот же script в Enterprise, я подтвердил, что работает отлично...

Ответ 5

Я хотел сделать что-то подобное, и я сильно заимствовал его из других ответов, но ни один из них не был полным рабочим ответом для меня. Вот что я сделал.

  • Создать новую учетную запись пользователя
  • Настройте следующие vbs script (в значительной степени вдохновленные этот поток), чтобы запустить приложение оболочки и назвать его чем-то вроде "launch.vbs"
set oShell=createobject("wscript.shell") 
sCmd="d:\launchbox\launchbox.exe" 
oShell.run sCmd,,true 'true forces it to wait for process to finish 
sCmd="shutdown /r /t 0" 
oShell.run sCmd
  1. Войти как новый пользователь

  2. Запустить regedit

  3. Добавьте новое строковое значение с именем Shell в HKEY_Current_User\Software\Microsoft\Windows NT\CurrentVersion\Winlogon со значением команды, которую нужно выполнить для выполнения script:

wscript d:\launchbox\launch.vbs
  1. Выйдите из системы и войдите в систему, чтобы просмотреть его в действии.

Ответ 6

Мой кулак пытается помочь, где я получил много. Не полный ответ, но, возможно, достаточно, чтобы добраться до места назначения. Это работало на моем приложении "Киоск", которое находится на моей "системе Windows 10 Enterprise", которая была создана специально для моего приложения. Он запустит вашу "оболочку" для запуска при запуске системы, а затем запустит программу "один раз". Надеюсь, это поможет.

Imports System.Threading

Public Class Form1

# Path to your ClickOnce app
Dim startPath As String = Environment.GetFolderPath(Environment.SpecialFolder.Programs) _
& '"\"' & '"remaining path to your app"' & '".appref-ms"'

# Path to your shell which is also a clickonce app(this one)

Dim spath As String = Application.StartupPath & '"\"' & My.Application.Info.AssemblyName _
& '".exe"'

# This sets the registry to start your shell which in turn starts your app. 
# I did this so that if the app is closed, they see the shell background.
# You can add controls to your shell to restart the app, shutdown.... 
#Just be cautious, make sure your app is 100% done and updates on it own before you 
# disable the ability to get back to windows explorer.
# Other wise you could have a very bad day.

My.Computer.Registry.SetValue('"HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows NT\ _
CurrentVersion\Winlogon"', '"Shell"', spath)


Thread.Sleep(500)

Process.Start(startPath)

End Class

Ответ 7

Я столкнулся с той же проблемой, и потому, что Script из TechNet о том, как настроить ShellLauncher, разрешает, затем отключает тот же Shell!

# Enable Shell Launcher

$ShellLauncherClass.SetEnabled($TRUE)

$IsShellLauncherEnabled = $ShellLauncherClass.IsEnabled()

"`nEnabled is set to " + $IsShellLauncherEnabled.Enabled

# Remove the new custom shells.

$ShellLauncherClass.RemoveCustomShell($Admins_SID)

$ShellLauncherClass.RemoveCustomShell($Cashier_SID)

# Disable Shell Launcher

$ShellLauncherClass.SetEnabled($FALSE)

$IsShellLauncherEnabled = $ShellLauncherClass.IsEnabled()

"`nEnabled is set to " + $IsShellLauncherEnabled.Enabled

Я лениво просто копировал и вставлял код и ожидал, что он сработает.

Если вы закомментируете последние десять строк, этот процесс будет работать.

Запомнить детей: не просто скопируйте и вставьте код от незнакомых людей!