我有一个用于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”问题