it-swarm.com.de

Ausführen einer Anwendung als Shell-Ersatz unter Windows 10 Enterprise

Ich muss ein spezielles Konto auf einem Computer erstellen, auf dem Windows 10 Enterprise ausgeführt wird. Dieses Konto würde eine Anwendung direkt beim Anmelden anstelle der Standard-Shell starten, und beim Beenden der Anwendung muss der Computer neu gestartet werden.

Ich konnte dies unter Windows 8.1 Embedded Industry Pro mithilfe der Konfigurationskonsole und der Lockdown-Funktionen problemlos durchführen.

Nun versuche ich unter Windows 10, die beiden Tutorials zu technet WESL_UserSetting und Kiosk unter Windows 10 Pro, Enterprise oder Education einzurichten.

Allerdings funktioniert keines der Tutorials. Ich habe es geschafft, die darin beschriebenen Skripte auszuführen, aber sie haben keine Auswirkung (ich habe sie so modifiziert, dass sie die Shells nicht entfernen).

Zum Schluss habe ich folgenden Code erhalten:

$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

Wenn Sie dieses Skript in einer Admin-Powershell ausführen, erhalten Sie die gewünschte Ausgabe:

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

Die Protokollierung als 'cmp'-Benutzer zeigt jedoch lediglich die Standard-Windows 10-Shell.

Was muss ich ändern, um ein Programm anstelle einer Standard-Shell ausführen zu können?

18
Jozef Legény

Haben Sie versucht, die Benutzer-Shell zu ändern?

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

Es gibt einige Registrierungsschlüssel, die Sie festlegen müssen. Die erste ermöglicht dem Benutzer eine eindeutige Shell, die zweite definiert die ausführbare Datei, die anstelle des Explorers gestartet wird.

6
kevmar

Ich hatte jetzt das gleiche Problem. Und ja, Microsoft hat den Weg für einen Shell-Ersatz geändert. Sie können den Embedded Shell Launcher installieren und verwenden, um Fenster nach Belieben für den Kioskmodus anzupassen. Dies ist jedoch nur für Unternehmen und Bildung verfügbar.

Wenn Sie die Enterprise-Version nicht kaufen möchten, können Sie die bereits bekannten Registrierungsspeicherorte in HKCU und HKLM verwenden. https://msdn.Microsoft.com/en-us/library/ms838576(v=WinEmbedded.5).aspx

Aber warten Sie, oh nein, seit Windows 10 können nur von Microsoft signierte Anwendungen verwendet werden, sodass Ihre normale .net-Anwendung nicht gestartet wird und der Bildschirm nach dem Anmelden schwarz bleibt. Wir haben jedoch einen Workaround gefunden.

Verwenden Sie einfach eine Batch-Datei als Bootstrapping. Wenn Sie die gewünschten Registrierungsschlüssel auf eine Batch-Datei setzen und die Batch-Datei die eigentliche Anwendung startet, funktioniert sie wie ein Zauber.

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

Ich habe selbst mit diesem gekämpft. Wenn Sie sich die Hinweise für Windows 10 Shell Launcher ansehen, funktioniert dies nur in der Enterprise- oder Education-Version. Wenn Sie versuchen, dies in der Home- oder Pro-Version zu verwenden, wird es einfach mit einem leeren Bildschirm gestartet. Mit dem gleichen Skript in Enterprise bestätigte ich, dass es einwandfrei funktioniert ... 

3
Michael

Ich denke, Sie haben die benutzerdefinierte Shell für den Benutzer richtig eingerichtet, aber möglicherweise müssen Sie das ShellLanuncher-Verhalten aktivieren Versuchen Sie Folgendes (am Ende Ihres Skripts):

$ShellLauncherClass.SetEnabled($TRUE)

Auf diese Weise wird die Standard-Windows 10-Shell nicht gestartet, wenn Sie sich mit dem anderen Konto anmelden. Die Befehlszeile wird jedoch (zumindest in meinem Fall) nicht gestartet, und das Ergebnis ist ein schwarzer Bildschirm.

Sie können den Task-Manager weiterhin ausführen und von dort aus eine neue Task ausführen. Ich verstehe jedoch nicht, warum die Befehlszeile nicht automatisch gestartet wird.

3
Giovanni

Ich wollte etwas Ähnliches machen und habe mich schwer von anderen Antworten geliehen, aber keine davon war eine voll funktionsfähige Antwort für mich. Hier ist, was ich am Ende getan habe.

  1. Erstellen Sie ein neues Benutzerkonto
  2. Richten Sie das folgende VBS-Skript ein (weitgehend inspiriert von diesem Thread ), um die Shell-Anwendung zu starten und ihr einen Namen wie "launch.vbs" zu geben.
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. Melden Sie sich als neuer Benutzer an

  2. Führen Sie Regedit aus

  3. Fügen Sie mit HKEY_Current_User\Software\Microsoft\Windows NT\CurrentVersion\Winlogon einen neuen Zeichenfolgenwert mit dem Wert des Befehls hinzu, den Sie zum Ausführen des Skripts ausführen müssen:

wscript d:\launchbox\launch.vbs
  1. Melden Sie sich als Benutzer ab und wieder an, um sie in Aktion zu sehen
3
Scott

Ich bin auf das gleiche Problem gestoßen, und zwar weil das Script von TechNet zur Konfiguration von ShellLauncher tatsächlich aktiviert, dann die gleiche Shell deaktiviert!

# 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

Ich habe nur faul den Code kopiert und eingefügt und erwartet, dass er funktioniert.

Wenn Sie die letzten zehn Zeilen auskommentieren, funktioniert dieser Prozess will

Erinnern Sie sich an Kinder: Kopieren Sie nicht einfach Code von Fremden!

1
FoxDeploy

Meine Faust versucht zu helfen, wo ich viel erhalten habe. Keine vollständige Antwort, aber vielleicht genug, um Sie ans Ziel zu bringen. Dies funktionierte mit meiner "Kiosk" -App, die sich auf "meinem" Windows 10 Enterprise-System befindet, das speziell für meine App erstellt wurde. Dadurch wird Ihre "Shell" so eingestellt, dass sie beim Systemstart startet und Ihr Programm "Einmal starten" startet. Hoffe das hilft.

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

Sie können ein Bereitstellungspaket mit Windows Configuration Designer erstellen. Die GUI hilft beim Erstellen eines einfachen Shell-Ersatzes, wenn Sie "Bereitstellungskioskgeräte" wählen

0
Johan A.