我正在尝试创建一个小应用程序来设置新的Windows 7系统。这基本上是这样我可以在所有设置完整的情况下制作硬盘的图像。
如何从C#启用远程桌面?
我觉得很有趣,每个人都在燃烧我,但没有人知道这个问题,sysprep无法完成设置图像所需的所有必要操作。我想启用RDP不运行它。我将只更改注册表项并添加防火墙设置。
我需要在几个硬件上执行此图像。
以下是我需要完成的任务清单。
静态IP地址,取决于计算机。 更改文件夹权限取决于域。 更改计算机名称 安装Rysnc服务器 安装Custom Applications 安装定制服务 防火墙权限 驱动程序 禁用交互式登录 更改日期时间,具体取决于要发送的系统的位置 激活Windows 组策略设置。
我不认为sysprep可以做所有这些事情吗?
答案 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();
}