web-dev-qa-db-fra.com

Comment exécuter une application en remplacement de Shell sous Windows 10 Entreprise

Je dois créer un compte spécial sur un ordinateur exécutant Windows 10 Entreprise. Ce compte lancerait une application directement lors de la connexion au lieu du shell par défaut lors de la connexion. Le fait de quitter l'application devrait obliger l'ordinateur à redémarrer.

J'ai pu le faire facilement sous Windows 8.1 Embedded Industry Pro à l'aide de la console de configuration et des fonctions de verrouillage.

Maintenant, sous Windows 10, j'essaie de suivre les deux tutoriels sur technet WESL_UserSetting et Configurer un kiosque sous Windows 10 Pro, Enterprise ou Education

Cependant, aucun des tutoriels ne fonctionne. J'ai réussi à exécuter les scripts décrits dans ceux-ci mais ils n'ont aucun effet (je les ai modifiés pour qu'ils ne suppriment pas le jeu de coquilles).

Enfin, j'ai fini avec le code suivant:

$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

L'exécution de ce script dans un admin PowerShell produit le résultat souhaité:

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

Cependant, la connexion en tant qu'utilisateur 'cmp' affiche simplement le shell Windows 10 standard.

Que dois-je changer pour pouvoir exécuter un programme au lieu d'un shell standard?

18
Jozef Legény

Avez-vous essayé de changer le shell des utilisateurs?

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

Vous devez définir quelques clés de registre. Le premier permet de donner à l'utilisateur un shell unique, le second définit l'exécutable qui démarre au lieu de l'explorateur.

6
kevmar

J'ai eu le même problème en ce moment. Et oui, Microsoft a changé la façon de remplacer Shell. Vous pouvez installer et utiliser le programme de lancement de shell intégré pour personnaliser les fenêtres à votre guise en mode kiosque. Mais ceci n'est disponible que pour Enterprise et Education.

Si vous ne voulez pas acheter la version Enterprise, vous pouvez utiliser les emplacements de registre déjà connus dans HKCU et HKLM. https://msdn.Microsoft.com/en-us/library/ms838576(v=WinEmbedded.5).aspx

Mais attendez, oh non, puisque Windows 10, il n’est possible d’utiliser que des applications signées Microsoft. Ainsi, votre application .net normale n’est pas lancée et l’écran reste noir après la connexion. Mais nous avons trouvé une solution de contournement.

Utilisez simplement un fichier de commandes comme amorçage. Si vous définissez les clés de registre de votre choix sur un fichier de traitement par lots et que celui-ci lance l'application réelle, cela fonctionne alors comme un charme.

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

Je me suis battu avec celui-ci moi-même. Si vous consultez les notes sur Windows 10 Shell Launcher, cela ne fonctionne que dans la version Entreprise ou Education. Si vous essayez d'utiliser ceci dans les versions Home ou Pro, il démarre simplement sur un écran vide. En utilisant le même script dans Enterprise, je confirme que cela fonctionne parfaitement ... 

3
Michael

Je pense que vous avez configuré correctement le shell personnalisé pour l'utilisateur, mais vous devez peut-être activer le comportement de ShellLanuncher . Essayez ceci (à la fin de votre script):

$ShellLauncherClass.SetEnabled($TRUE)

Ainsi, le shell Windows 10 standard n'est pas lancé lorsque vous vous connectez à l'autre compte, mais (du moins dans mon cas) la ligne de commande ne démarre pas et le résultat est un écran noir.

Vous pouvez toujours exécuter le gestionnaire de tâches et exécuter une nouvelle tâche à partir de là, mais je ne comprends pas pourquoi la ligne de commande ne démarre pas automatiquement.

3
Giovanni

Je voulais faire quelque chose de similaire et j'ai beaucoup emprunté à d'autres réponses, mais aucune d'entre elles n'était une réponse de travail complète pour moi. Voici ce que j'ai fini par faire.

  1. Créer un nouveau compte utilisateur
  2. Configurez le script vbs suivant (largement inspiré de ce fil ) pour lancer l’application Shell et nommez-le comme "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. Se connecter en tant que nouvel utilisateur

  2. Exécuter regedit

  3. Ajoutez une nouvelle valeur de chaîne nommée Shell à HKEY_Current_User\Software\Microsoft\Windows NT\CurrentVersion\Winlogon avec une valeur de la commande que vous devez exécuter pour exécuter votre script:

wscript d:\launchbox\launch.vbs
  1. Déconnectez-vous et reconnectez-vous en tant qu'utilisateur pour le voir en action
3
Scott

J'ai rencontré le même problème, et ce parce que le script de TechNet sur la configuration de ShellLauncher active, puis désactive le même 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

Je copiais et collais le code paresseusement et m'attendais à ce qu'il fonctionne.

Si vous commentez les dix dernières lignes, ce processus fonctionnera

Rappelez-vous les enfants: ne vous contentez pas de copier-coller du code de Strangers!

1
FoxDeploy

Mon poing a essayé d’aider là où j’ai beaucoup reçu. Pas une réponse complète, mais peut-être suffisante pour vous amener à votre destination. Cela a fonctionné sur mon application "Kiosk" qui se trouve sur "mon" système Windows 10 Enterprise, spécialement conçu pour mon application. Il configurera votre "Shell" pour qu'il démarre au démarrage du système, puis lancez votre programme click once. J'espère que cela t'aides.

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

Vous pouvez créer un package de provisioning à l'aide du Concepteur de configuration Windows . L'interface graphique vous aidera à créer un simple remplacement de shell lorsque vous choisissez "Provisionner des périphériques de kiosque".

0
Johan A.