在Windows Server 2003上更新每个configuration文件的registry

我有一个用于terminal服务的Windows Server 2003系统。 我们不使用漫游configuration文件。 我们不使用login脚本。 我有大约三十到四十个帐户login到这个系统,因此有本地configuration文件。

安装到此系统上的一个软件包使用HKCU / Softwareregistry树进行授权,因此每个用户在其本地configuration文件中都有许可证密钥。

如何以确定性的方式更新所有这些不同的configuration文件registry?

有几种方法可以实现你想要的 – 一个比另一个更笨重。 终端服务器可能是部署的噩梦 – 用户可能没有权限运行msiexec.exe ,因此MSI自我修复可能会失败。 这就是为什么我通常更喜欢使用批处理文件脚本reg文件来处理您所面临的情况。

我会使用微软的主动安装功能 这只是一个功能的名称,它允许您“在登录时对每个配置文件运行一次”。 这是一个很好的解释: http : //www.etlengineering.com/installer/activesetup.txt

以下是一个MSI文件(这是* .reg文件的内容)的示例主动安装条目:

REGEDIT4 [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Active Setup\Installed Components\[ProductCode]] "StubPath"="[SystemFolder]msiexec.exe /q /fou [ProductCode]" 

“StubPath”命令可以是任何“runnable”,在你的情况下,我会建议不运行msiexec.exe,而是通过cscript.exe或其他一些批处理机制(CMD,REG等)的VBScript。 原因是我上面说过:msiexec.exe可能不允许运行终端服务器用户。 换句话说,像这样的东西:

 REGEDIT4 [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Active Setup\Installed Components\MyProduct] "StubPath"="[SystemFolder]cmd.exe /k C:\SomeScript.cmd" 

还有其他方法可以将数据添加到每个用户的配置文件,如使用广告的MSI快捷方式和自我修复 ,但我不会建议终端服务器。 有关使用MSI文件进行注册表设置的问题,请参阅此serverfault.com的答案

以编程方式挂载注册表配置单元,更改密钥,然后关闭配置单元。 或者,您可以使用PSExec / runas以该用户身份运行“更新密钥”脚本,这也解决了“编辑HKCU”问题