我有一个使用 Windows Installer 的内部应用程序。此应用程序的每次更新都是一次“重大升级”(不同的产品代码,相同的升级代码),它调用 RemoveExistingProducts。(实际上,这意味着每次创建新版本时,您只需单击 MSI 文件即可安装它,因为它会卸载旧版本,然后安装新版本。)
它目前通过组策略中的机器配置进行部署。任何链接的 GPO 都将在下次启动时安装该软件,这非常有效。
我还有一个持续集成服务器 (TeamCity),每次我们向源代码控制提交一些内容并“固定”以进行部署时,它都会为这个软件构建和运行测试。我什至可以将新构建的 MSI 文件复制到网络共享以准备部署。
不幸的是,作为集成过程的一部分,我没有看到实际告诉 GPO 以编程方式重新部署新更新的 MSI 文件的方法。
如果我只是覆盖现有的 MSI 文件并且不接触 GPO,那么安装了旧 MSI 的机器不会注意到这种变化,而较新的机器在找不到包含产品代码的 MSI 文件时会吓坏组策略管理编辑器生成的脚本。不错,有道理
如果我只是覆盖现有的 MSI 文件并在 GPME 中单击“重新部署应用程序”,似乎会发生相同的行为。同样,我们似乎不高兴我们试图重新部署一个 MSI 文件,该文件的包代码与 GPME 生成的脚本中的代码不匹配。不错,有道理
什么做的工作是右键单击在GPME安装包,打“立即删除”,然后将安装包右后卫-创建一个新的* .aas脚本和老包被删除,并在下次安装新的软件包引导。有没有办法通过批处理脚本来做到这一点,我可以将它添加到我的集成服务器的构建过程中?
谢谢!
在查看了 Evan 的评论后,我最终只编写了一个在 Startup 上运行的小批量脚本。我还编写了一个名为msicheck
确定是否安装了给定 MSI 包的小实用程序。这很好地满足了我的需求,比翻阅 LDAP 规范的页面要好得多!=)
通配符证书(例如 *.example.com)在 SQL Server 2008 或更低版本中根本不起作用。但是加密连接到MSDN上的 SQL Server声明,就像白天一样,
SQL Server 2008 R2 支持通配符证书。
优秀。所以我在一台机器上设置了 SQL Server 2008 R2 Express,并配置了HKLM\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL10_50.SQLEXPRESS\MSSQLServer\SuperSocketNetLib\Certificate
我的通配符 SSL 证书指纹的条目(因为在处理 SQL Server 的五年里,我从来没有在 Sql Server 中遇到过 #$@# 对话框配置以显示任何证书)。
然后 SQL Server 日志告诉我这一切都很好:
2010-08-31 11:46:04.04 服务器证书 [Cert Hash(sha1) "5DDD9E51B30E0CA6CE3656AE54EC6D0B8B75904A"] 已成功加载以进行加密。
不幸的是,如果我尝试使用 Microsoft SQL Server Management Studio(2008 R2 版本)或 .NET Framework 4.0 中提供的 Sql* 类,我总是收到以下异常:
已成功与服务器建立连接,但在登录前握手期间发生错误。(提供者:SSL 提供者,错误:0 - 证书的 CN 名称与传递的值不匹配。)(Microsoft SQL Server,错误:-2146762481)
以下是我尝试过的事情:
prod
,并且正确设置了 DNS 后缀:prod.example.com
。)prod.example.com …