Как запустить приложение в качестве замены оболочки в 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

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

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.

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

9 ответов

Решение

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

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

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

У меня была такая же проблема прямо сейчас. И да, 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, а Batch-File запускает реальное приложение, то оно работает как чудо-кнопка.

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

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

  1. Создать новую учетную запись пользователя
  2. Установите следующий скрипт vbs (в значительной степени вдохновленный этим потоком) для запуска приложения оболочки и назовите его что-то вроде "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 со значением команды, которую необходимо выполнить для выполнения сценария:

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

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

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

$ShellLauncherClass.SetEnabled($TRUE)

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

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

Я хочу начать с извинений за комментарий к очень старой ветке.

Последние 6 месяцев я изо всех сил пытался заставить настраиваемое приложение работать как оболочку по умолчанию и сохранить права администратора. Как и многие люди, эти сценарии и / или команды просто не работали, и мне нужно было что-то быстрое, эффективное и ПРОСТОЕ!

Простая замена «explorer.exe» (HKLM \ SOFTWARE \ Microsoft \ Window NT \ Winlogon \ Shell) произвольным расположением приложения обеспечивает черный экран.

Гораздо более простой способ, и он отлично работает, - это создать BATCH-скрипт для вызова пользовательского приложения через PowerShell с повышенными правами ...

      powershell -nologo -noprofile -executionpolicy bypass -command "start-process -verb 'runas' -filepath <full path of custom app executable>"

Заменив "explorer.exe" на этот пакетный сценарий, я смог успешно создать блокировку в стиле киоска под Windows 10 PRO с приложением, не относящимся к UWP.

Я столкнулся с той же проблемой, и это потому, что 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

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

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

Помните Детей: не просто скопируйте и вставьте код от Незнакомцев!

Моя первая попытка помочь, где я получил много. Не полный ответ, но, возможно, достаточно, чтобы доставить вас к месту назначения. Это работало на моем приложении "Киоск", которое находится на "моей" системе 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's 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

Вы можете создать пакет обеспечения с помощью конструктора конфигурации Windows. Графический интерфейс поможет создать простую замену оболочки, когда вы выберете "устройства обеспечения киоска"

Другие вопросы по тегам