Windows 10 Enterpriseを実行しているコンピューターで特別なアカウントを作成する必要があります。このアカウントは、デフォルトのシェルの代わりにログイン時にアプリケーションを直接起動し、アプリケーションを終了するとコンピューターを強制的に再起動します。
構成コンソールとロックダウン機能を使用して、Windows 8.1 Embedded Industry Proでこれを簡単に行うことができました。
さて、Windows 10では、technetの2つのチュートリアル 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
管理者のPowerShellでこのスクリプトを実行すると、目的の出力が生成されます。
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シェルが表示されます。
標準シェルの代わりにプログラムを実行できるようにするには、何を変更する必要がありますか?
ユーザーシェルを変更しようとしましたか?
https://msdn.Microsoft.com/en-us/library/ms838576(v = WinEmbedded.5).aspx
設定が必要なレジストリキーがいくつかあります。 1つ目はユーザーに一意のシェルを提供する機能を有効にし、2つ目はエクスプローラーの代わりに起動する実行可能ファイルを定義します。
私は今、同じ問題を抱えていました。そして、はい、Microsoftはシェルの交換方法を変更しました。 Embedded Shell Launcherをインストールして使用し、キオスクモード用にウィンドウを好きなようにカスタマイズできます。ただし、これはエンタープライズおよび教育機関でのみ利用可能です。
Enterpriseバージョンを購入したくない場合は、HKCUおよびHKLMの既知のレジストリの場所を使用できます。 https://msdn.Microsoft.com/en-us/library/ms838576(v = WinEmbedded.5).aspx
ただし、Windows 10以降はMicrosoft署名済みアプリケーションしか使用できないため、通常の.netアプリケーションは起動せず、ログイン後も画面が黒のままになります。しかし、回避策を見つけました。
ブートストラップとしてバッチファイルを使用するだけです。好みのレジストリキーをバッチファイルに設定し、バッチファイルが実際のアプリケーションを起動する場合、それは魅力のように機能します。
@echo off
echo Bootstrapping, please wait ...
start /b "Bootstrap" "C:\vmwatcher\VMViewClientWatcher.exe"
私は似たようなことをしたかったので、他の答えから大きく借りましたが、それらのどれも私にとって完全に機能する答えではありませんでした。これが私がやったことです。
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
新しいユーザーとしてログイン
Regeditを実行する
スクリプトを実行するために実行する必要があるコマンドの値を使用して、HKEY_Current_User\Software\Microsoft\Windows NT\CurrentVersion\WinlogonにShellという名前の新しい文字列値を追加します。
wscript d:\launchbox\launch.vbs
私はこれと自分で戦いました。 Windows 10 Shell Launcherの注意事項を見ると、EnterpriseまたはEducationバージョンでのみ機能します。 HomeまたはProバージョンでこれを使用しようとすると、単に空白の画面で起動します。エンタープライズで同じスクリプトを使用して、完全に動作することを確認しました...
ユーザー用にカスタムシェルを正しくセットアップしたと思いますが、ShellLanuncherの動作をアクティブにする必要があるかもしれません。これを試してください(スクリプトの最後):
$ShellLauncherClass.SetEnabled($TRUE)
この方法では、他のアカウントでログオンしたときに標準のWindows 10シェルが起動しませんが、(少なくとも私の場合)コマンドラインは起動せず、結果は黒い画面になります。
タスクマネージャーを実行してそこから新しいタスクを実行することはできますが、コマンドラインが自動的に起動しない理由がわかりません。
私は同じ問題にぶつかりました。それは、 ShellLauncherの構成方法に関するTechNetのスクリプト が実際に有効にしてから、同じシェルを無効にするためです!
# 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
私は遅延してコードをコピーして貼り付け、それが機能することを期待していました。
最後の10行をコメント化すると、このプロセスは機能します。
私の拳は私が多くを受け取った場所を助けようとします。完全な答えではありませんが、目的地に行くのに十分かもしれません。これは、私のアプリ専用に構築された「私の」Windows 10 Enterpriseシステム上にある「キオスク」アプリで機能しました。システムの起動時に「シェル」を起動し、クリック1回プログラムを起動します。お役に立てれば。
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構成デザイナーを使用してプロビジョニングパッケージを作成できます。 GUIは、「キオスクデバイスのプロビジョニング」を選択したときに、単純なシェルの置き換えを作成するのに役立ちます