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

时间:2012-04-30 16:41:30

标签: c# remote-desktop rdp

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

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

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

我需要在几个硬件上执行此图像。

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

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

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

3 个答案:

答案 0 :(得分:11)

我在之前的项目中使用了以下内容,似乎效果很好:

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

答案 1 :(得分:3)

最好使用Windows Sysprep附带的工具。它将做什么准备系统,以便您可以进行所需的所有设置,运行sysprep,然后关闭计算机并制作图像。 (here is a video tutorial关于如何使用Sysprep和ImageX这两个窗口工具来完成你想要做的事情)

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

这样做的一个重要原因是(和I got bit myself这就是我学习该工具的方法)如果你使用的是域,每台机器的RID都会与你的AD系统相同。


  

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

     

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

所有这些内容都可以放在unattend.xml答案文件中并进行设置。 Here is a non video tutorial向您展示如何创建unattend.xml文件。

答案 2 :(得分:1)

此代码在注册表中设置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();
            }