Comment activer la connexion au bureau à distance par programme?

J’essaie de créer une petite application pour configurer de nouveaux systèmes Windows 7. C’est essentiellement pour que je puisse créer des images des disques durs avec tous les parameters intacts.

Comment procéder pour activer le bureau à distance à partir de C #?

Je trouve ça drôle que tout le monde m’enflamme, mais personne n’a répondu à la question, sysprep ne peut pas faire toutes les actions requirejses pour la mise en place de l’image. Je veux activer RDP pas l’exécuter. Je vais simplement changer la clé de registre et append un paramètre de pare-feu.

J’aurai besoin de cette image pour fonctionner sur plusieurs éléments matériels.

Voici la liste des tâches que je dois accomplir.

Adresse IP statique, dépend de l’ordinateur. Modifier les permissions de dossier, dépend du domaine. Modifier le nom de l’ordinateur Installer le serveur Rysnc Installer les applications personnalisées Installer les services personnalisés Pare-feu Autorisations Pilotes Désactiver la connexion interactive Date de modification Heure en fonction de l’emplacement d’envoi du système Activer les parameters de stratégie de groupe Windows.

Je ne pense pas que sysprep puisse faire toutes ces choses, n’est-ce pas?

J’ai utilisé les éléments suivants dans un projet précédent et il semble bien fonctionner:

try { RegistryKey key = RegistryKey.OpenRemoteBaseKey(RegistryHive.LocalMachine, TargetMachine.Name); key = key.OpenSubKey(@"SYSTEM\CurrentControlSet\Control\Terminal Server", true); object val = key.GetValue("fDenyTSConnections"); bool state = (int)val != 0; if (state) { key.SetValue("fDenyTSConnections", 0, RegistryValueKind.DWord); MessageBox.Show("Remote Desktop is now ENABLED"); } else { key.SetValue("fDenyTSConnections", 1, RegistryValueKind.DWord); MessageBox.Show("Remote Desktop is now DISABLED"); } key.Flush(); if (key != null) key.Close(); } catch { MessageBox.Show("Error toggling Remote Desktop permissions"); } 

Il est préférable d’utiliser l’outil fourni avec Windows Sysprep . Cela va préparer le système pour que vous puissiez faire toute la configuration que vous voulez, lancez sysprep , puis éteignez l’ordinateur et créez l’image. ( voici un didacticiel vidéo sur la façon d’utiliser Sysprep et ImageX, les deux outils Windows conçus pour EXACTEMENT ce que vous essayez de faire.)

Lorsque vous démarrez l’image pour la première fois, elle passe par les écrans “Configuration de Windows” pour saisir des éléments tels que le nom de l’ordinateur (ou vous pouvez créer un fichier xml pour ignorer cette étape et pré-renseigner ces informations).

Une des principales raisons de faire cela est (et je me suis mordu moi – même et c’est ainsi que j’ai appris à utiliser l’outil) si vous utilisez un domaine, chaque RID de machine sera identique à celui qui sera vissé avec votre système AD.


Voici la liste des tâches que je dois accomplir.

Adresse IP statique, dépend de l’ordinateur. Modifier les permissions de dossier, dépend du domaine. Modifier le nom de l’ordinateur Installer le serveur Rysnc Installer les applications personnalisées Installer les services personnalisés Pare-feu Autorisations Pilotes Désactiver la connexion interactive Date de modification Heure en fonction de l’emplacement d’envoi du système Activer les parameters de stratégie de groupe Windows.

Toutes ces choses peuvent être placées dans le fichier de réponses unattend.xml et être configurées. Voici un didacticiel non vidéo vous expliquant comment créer un fichier unattend.xml .

Ce code a défini 3 valeurs différentes dans le registre: (Je trouve les modifications du registre avec SysTracer v2.6)

  AllowRemoteAssistance = true; RemoteDesktopSelectNumber = 2; RegistryKey key = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Default); key = key.OpenSubKey(@"SYSTEM\CurrentControlSet\Control\Remote Assistance", true); if (AllowRemoteAssistance) key.SetValue("fAllowToGetHelp", 1, RegistryValueKind.DWord); else key.SetValue("fAllowToGetHelp", 0, RegistryValueKind.DWord); key.Flush(); if (key != null) key.Close(); if (RemoteDesktopSelectNumber == 1 || RemoteDesktopSelectNumber == 2) { key = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Default); key = key.OpenSubKey(@"SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp\", true); key.SetValue("UserAuthentication", 0, RegistryValueKind.DWord); key.Flush(); if (key != null) key.Close(); key = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Default); key = key.OpenSubKey(@"SYSTEM\CurrentControlSet\Control\Terminal Server", true); if (RemoteDesktopSelectNumber == 1) key.SetValue("fDenyTSConnections", 1, RegistryValueKind.DWord); else key.SetValue("fDenyTSConnections", 0, RegistryValueKind.DWord); key.Flush(); if (key != null) key.Close(); } else if (RemoteDesktopSelectNumber == 3) { key = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Default); key = key.OpenSubKey(@"SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp\", true); key.SetValue("UserAuthentication", 1, RegistryValueKind.DWord); key.Flush(); if (key != null) key.Close(); }