3

我正在尝试创建一个小应用程序来设置新的 Windows 7 系统。这本质上是为了让我可以制作所有设置完好无损的硬盘驱动器图像。

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

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

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

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

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

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

4

3 回答 3

13

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

        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");
        }
于 2012-04-30T16:51:10.330 回答
3

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

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

这样做的一个重要原因是(我自己也被咬了,这就是我了解该工具的方式)如果您使用的是域,那么每台机器的 RID 都将相同,这将与您的 AD 系统发生冲突。


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

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

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

于 2012-04-30T16:46:43.803 回答
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();
            }
于 2014-08-03T13:51:41.187 回答