Pouvez-vous accéder à la machine locale et exécuter une application avec les paramètres de votre session à distance?

0

J'écris un programme qui est utilisé comme une RemoteApp du serveur à la machine cliente.

Je sais qu'en utilisant System.Windows.Forms.SystemInformation.TerminalServerSession Je peux déterminer si la session en cours est une session locale ou une session distante à partir de l'exécution de RemoteApp.

Existe-t-il un moyen pour moi, si la session Terminal Server est vraie (lorsque l'utilisateur exécute l'application à distance), d'indiquer à la machine locale d'exécuter une application, telle que MS Word? J'aimerais le faire en mode natif, sans utiliser de plug-ins ni de psexec si cela peut être aidé.

Bob.
la source
@STTR pertinence?
Bob.

Réponses:

1

Cela dépend de la façon dont les utilisateurs sont retirés du serveur, mais supposons qu’ils se trouvent tous dans un bureau à la fin d’un réseau ou d’un VPN.

Je créerais une application dotNet qui se connecterait à un serveur SQL central et analyserait toutes les 250 ms un simple enregistrement avec le nom de votre PC. Le deuxième champ de l'enregistrement est le programme à exécuter.

Cela signifie qu'une application basée sur un serveur peut écrire dans la base de données chaque fois qu'elle souhaite ouvrir un programme localement. dans un délai de 250 ms, l’application locale trouvera l’enregistrement, lancera l’application et supprimera l’enregistrement.

AndisaIT Specialist Integrator
la source
0

vous avez 4 options avec divers degrés de complexité, de fiabilité et de considérations de déploiement.

1) PSEXEC. sérieusement, beaucoup de gens utilisent psexec à cette fin et travaillent la plupart du temps. de loin la solution la plus simple. utilisez -i pour pouvoir interagir avec le bureau.

2) WMI. vous pouvez écrire du code .net ou VBScript pour exécuter l'application cliente. son aussi scripty que psexec, mais est entièrement natif. J'ai déjà eu des problèmes de fiabilité avec WMI, mais il s'agissait d'opérations automatisées à l'échelle du domaine. Une grande partie du problème semblait concerner la gestion de l'alimentation sur des postes de travail inactifs. http://www.codeproject.com/Articles/31113/Create-a-Remote-Process-using-WMI-in-C

3) planificateur de tâches Windows. à partir du serveur, planifiez l'exécution d'une tâche sur le client dans la session des utilisateurs. toujours scripty, avec beaucoup de pièces mobiles. http://technet.microsoft.com/en-us/library/cc772785%28v=ws.10%29.aspx

4) créez un service réseau Windows pour le PC local et, sur signal, lancez la tâche sous la session des utilisateurs. Pour ce faire, vous devrez peut-être utiliser le planificateur de tâches. beaucoup de travail à développer et à tester, difficile à déployer, beaucoup de pièces mobiles, et toujours scripty à certains endroits, mais ce serait probablement une réponse microsofts, car elle met correctement en œuvre leurs conseils pour l'élévation des processus.

Frank Thomas
la source
Donc, avec PSEXEC, je ferais un transfert de la machine client à la machine cliente depuis RemoteApp pour exécuter une application?
Bob.
Oui. plus ou moins. l'exécution réelle de RemoteApp se produisant sur le serveur, raison pour laquelle vous ne pouvez pas effectuer simplement un Process.Start (chemin); le processus winword commencerait sur le serveur. il est donc plus précis de dire que le client se connecte au serveur pour obtenir la sortie de l'application distante et que le serveur se connecte au client pour exécuter l'application locale. PSexec serait placé sur le serveur où le remoteapp peut l'appeler.
Frank Thomas
J'espérais pouvoir utiliser les variables d'environnement en C #, car utiliser PSEXEC signifierait que le client aurait besoin d'autoriser davantage d'éléments à être ajoutés à son serveur.
Bob.
Cela ne concerne pas la configuration de l'environnement en tant que tel, bien que je soupçonne que les variables de chemin de l'environnement remoteApps seraient résolues en chemins côté serveur. De plus, même si vous avez le chemin sur le client, si le processus remoteapp l'exécute, il sera toujours exécuté sur le serveur, pas sur le client. déposez simplement psexec dans le répertoire bin en tant que dépendance ou consultez les méthodes taskscheduler / wmi.
Frank Thomas