如何以编程方式启用远程桌面连接?

我正在尝试创建一个小应用程序来设置新的Windows 7系统。 这基本上是这样我可以制作硬盘的图像,所有设置都完好无损。

我如何从C#启用远程桌面?

我觉得很有趣,每个人都在燃烧我,但没有人能够解决这个问题,sysprep无法完成设置图像所需的所有必要操作。 我想启用RDP不运行它。 我将只更改注册表项并添加防火墙设置。

我需要这个图像来执行几个硬件。

这是我需要完成的任务清单。

静态IP地址,取决于计算机。 更改文件夹权限取决于域。 更改计算机名安装Rysnc服务器安装自定义应用程序安装自定义服务防火墙权限驱动程序禁用交互式登录更改日期时间取决于要发送的系统的位置激活Windows组策略设置。

我不认为sysprep可以做所有这些事情吗?

我在之前的项目中使用了以下内容,它似乎运行良好:

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"); } 

最好使用Windows Sysprep附带的工具。 它将做什么准备系统,以便您可以进行所需的所有设置,运行sysprep ,然后关闭计算机并制作图像。 ( 这是一个关于如何使用Sysprep和ImageX的video教程 ,这两个Windows工具旨在完全按照您的要求进行操作)

当您第一次启动图像时,它将通过“设置Windows”屏幕输入计算机名称之类的内容(或者您可以放入xml文件以跳过该步骤并预先填写该信息)。

这样做的一个重要原因是( 我自己也有点了解这个工具的方法)如果你使用一个域,每台机器的RID都会与你的AD系统相同。


这是我需要完成的任务清单。

静态IP地址,取决于计算机。 更改文件夹权限取决于域。 更改计算机名安装Rysnc服务器安装自定义应用程序安装自定义服务防火墙权限驱动程序禁用交互式登录更改日期时间取决于要发送的系统的位置激活Windows组策略设置。

所有这些都可以放在unattend.xml答案文件中并进行设置。 这是一个非video教程,向您展示如何创建unattend.xml文件。

此代码在注册表中设置3个不同的值:(我发现注册表更改与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(); }