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?
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.
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"
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 ...
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.
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.
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
Se connecter en tant que nouvel utilisateur
Exécuter regedit
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
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.
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
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".