J'ai un programme qui est lancé au démarrage du système à l'aide du Planificateur de tâches sur Windows Server 2012. Le programme doit démarrer même si l'ordinateur redémarre automatiquement.
L'administrateur est le compte utilisé pour démarrer le programme, l'option "Exécuter si l'utilisateur est connecté ou non" est cochée pour la tâche.
Le problème est que lorsque quelqu'un se connecte finalement en tant qu'administrateur à l'aide de la connexion Bureau à distance, l'interface (fenêtre de programme) est masquée.
Si je comprends bien, il n'y a aucun moyen de résoudre ce problème en utilisant le Planificateur de tâches.
Comment puis-je résoudre ça?
Ce devrait être un problème assez courant, mais je ne trouve rien en cherchant sur le net. Je suis assez surpris que Microsoft autorise une telle limitation dans leur planificateur. Puis-je créer un VBScript ou quelque chose qui s'exécute au démarrage et lance le programme qui sera ensuite visible lorsque l'utilisateur se connectera réellement?
D'autres idées?
(Je ne veux pas avoir à créer un programme GUI uniquement distinct qui se connecte au programme d'origine en passant. Je le préférerais également si je n'ai pas à terminer le programme déjà en cours d'exécution lors de la connexion de l'utilisateur, puis à lancer à nouveau.)
Réponses:
J'ai compris comment le faire moi-même. C'est en quelque sorte une solution de contournement, mais c'est ce à quoi je m'attendais.
http://technet.microsoft.com/sv-se/sysinternals/bb963905.aspx
Arrêtez! Ne grincez pas tout de suite. Continuer à lire...
Exécutez-le, définissez-le pour que l'administrateur se connecte automatiquement.
Créez une tâche dans le Planificateur de tâches. Définissez-le pour qu'il s'exécute uniquement lorsque l'utilisateur (administrateur) est connecté. Le déclencheur est "à la connexion" et spécifiez que ce n'est que lorsque l'administrateur se connecte.
Créez une deuxième tâche. Exécuter uniquement lorsque l'utilisateur est connecté, déclencher lors de la connexion administrateur. L'action doit être «démarrer un programme» et le programme est «C: \ Windows \ System32 \ rundll32.exe» avec le champ d'argument défini sur «user32.dll, LockWorkStation».
Ce qui se passe maintenant si vous redémarrez l'ordinateur, c'est que l'administrateur se connecte automatiquement, le programme que vous souhaitez démarrer est démarré et le poste de travail se verrouille. Si je me connecte via Remote Desktop Connection, je peux voir la fenêtre du programme et utiliser l'interface graphique. Je peux verrouiller / déverrouiller l'ordinateur sans problème et déconnecter / reconnecter à ma guise. Il n'y a aucun problème si je vais sur le serveur et me connecte au poste de travail réel non plus. Étant donné que l'administrateur est déjà connecté, la tâche ne s'exécutera pas à nouveau (elle ne crée pas une boucle de verrouillage de connexion infinie dont vous ne pouvez pas sortir).
Aussi simple que cela. Certes, il y a un délai d'une seconde avant que l'ordinateur ne se verrouille après la connexion automatique et je suppose qu'un pirate professionnel avec un accès physique à l'ordinateur pourrait faire quelque chose de sournois pendant cette fenêtre de temps, mais dans mon cas, je peux ignorer ce risque de sécurité. Tant que je ne laisse aucun pirate professionnel entrer chez moi et que je leur montre l'ordinateur, le système doit être relativement sûr. Surtout, il n'y a pas beaucoup de valeur sur l'ordinateur qui nécessite une protection super-coffre-fort, donc je suis assez satisfait de cette solution.
la source
SuperUser
. Si vous pouviez y répondre, ce sera d'une grande aide - superuser.com/questions/902386/…Alors pourquoi n'en faites-vous pas un service système, comme le définissent les spécifications Windows?
Vous ne pouvez pas. Les programmes d'arrière-plan ne sont pas censés interagir avec l'interface utilisateur. Ou: l'interface utilisateur doit exécuter son propre programme qui se connecte ensuite au service. L'interface utilisateur exécutée dans l'espace utilisateur de l'utilisateur connecté effectue la présentation, le service Windows effectue le traitement. C'est ainsi que le modèle est conçu pour une quinzaine d'années.
Je suis plus surpris que vous n'ayez jamais hésité à demander pourquoi.
Il y a plusieurs problèmes:
Ni moi ni Microsoft ne se soucient à ce stade de ce que vous aimez faire. Il existe un modèle établi et pris en charge pour lier le traitement en arrière-plan à une interface utilisateur utilisateur connectée - utilisez-le ou non. Mais sinon, ne vous plaignez pas des problèmes de sécurité que vous posez.
la source
Tout
Session
dépend du programme dans lequel votre programme s'exécute. Si personne n'est connecté, il n'y a pas de session interactive à afficher sous, je crois qu'il fonctionne sousSession 0
, qui a une interface utilisateur étrange qui ne s'affiche pas comme les autres.Maintenant, si votre programme détecte le
explorer.exe
lancement (ou une autre manière de détecter la connexion de l'utilisateur) et se remémore par magie ou a engendré un processus enfant sur ce nouvel identifiant de session, alors quiconque se connecte verra avec plaisir ce que vous faites.la source