web-dev-qa-db-ja.com

Windows 10 Enterpriseでシェルの代替としてアプリケーションを実行する方法

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シェルが表示されます。

標準シェルの代わりにプログラムを実行できるようにするには、何を変更する必要がありますか?

20
Jozef Legény

ユーザーシェルを変更しようとしましたか?

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

設定が必要なレジストリキーがいくつかあります。 1つ目はユーザーに一意のシェルを提供する機能を有効にし、2つ目はエクスプローラーの代わりに起動する実行可能ファイルを定義します。

7
kevmar

私は今、同じ問題を抱えていました。そして、はい、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"
12
Steven Spyrka

私は似たようなことをしたかったので、他の答えから大きく借りましたが、それらのどれも私にとって完全に機能する答えではありませんでした。これが私がやったことです。

  1. 新しいユーザーアカウントを作成する
  2. 次のvbsスクリプト(主に this thread に触発された)をセットアップして、シェルアプリケーションを起動し、「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. スクリプトを実行するために実行する必要があるコマンドの値を使用して、HKEY_Current_User\Software\Microsoft\Windows NT\CurrentVersion\WinlogonにShellという名前の新しい文字列値を追加します。

wscript d:\launchbox\launch.vbs
  1. ユーザーとしてログオフして再度ログオンし、動作を確認します
5
Scott

私はこれと自分で戦いました。 Windows 10 Shell Launcherの注意事項を見ると、EnterpriseまたはEducationバージョンでのみ機能します。 HomeまたはProバージョンでこれを使用しようとすると、単に空白の画面で起動します。エンタープライズで同じスクリプトを使用して、完全に動作することを確認しました...

3
Michael

ユーザー用にカスタムシェルを正しくセットアップしたと思いますが、ShellLanuncherの動作をアクティブにする必要があるかもしれません。これを試してください(スクリプトの最後):

$ShellLauncherClass.SetEnabled($TRUE)

この方法では、他のアカウントでログオンしたときに標準のWindows 10シェルが起動しませんが、(少なくとも私の場合)コマンドラインは起動せず、結果は黒い画面になります。

タスクマネージャーを実行してそこから新しいタスクを実行することはできますが、コマンドラインが自動的に起動しない理由がわかりません。

3
Giovanni

私は同じ問題にぶつかりました。それは、 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行をコメント化すると、このプロセスは機能します

覚えておいてください:見知らぬ人からコードをコピーして貼り付けるだけではありません!

1
FoxDeploy

私の拳は私が多くを受け取った場所を助けようとします。完全な答えではありませんが、目的地に行くのに十分かもしれません。これは、私のアプリ専用に構築された「私の」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
0
HeloDriver

Windows構成デザイナーを使用してプロビジョニングパッケージを作成できます。 GUIは、「キオスクデバイスのプロビジョニング」を選択したときに、単純なシェルの置き換えを作成するのに役立ちます

0
Johan A.