我正在解决一个令人困惑的卸载/安装问题,我已经筋疲力尽了google-foo所以我来到这里希望有人能指出我正确的方向。
场景: 我们正在使用AnthillPro在Windows Server 2003(x64 SP2)Web服务器上进行传统ASP网站(内置VS2003)的每晚构建/部署,并且大部分工作正常。 AnthillPro帐户使用产品代码卸载前一晚的更新包,然后使用MSI的名称安装新的更新包。
例:
msiexec /qb /x {89B05BA3-679C-4120-BD6A-339BC3E726FD}
msiexec /qb /i "Update package.msi" PARAMETERVAL=X
这在我们的QA和Production Web服务器上工作得很好,但是开发服务器总是给我们错误:
The installation source for this product is not available. Verify that the source exists and that you can access it.
最有趣的细节是,当AnthillPro帐户安装它时,我无法在“添加/删除程序”小部件中看到更新。我几周前最初发现这个问题,并认为我通过手动将ALLUSERS属性添加到MSI并将其设置为2来修复它。再次,这是一个Visual Studio 2003解决方案,所以我不能只设置通过界面的All Users属性。
然而,我能够看到关于QA和Prod的最新更新,所以它似乎是开发盒的特别之处。我已经确认生成的MSI确实具有ALLUSERS属性,并且我尝试将其设置为1而不是2(每this次讨论)。
MSI正在被每个构建覆盖,所以原来的MSI确实没有在正在执行安装的目录中,但如果我只是尝试重新部署已经存在的内容,它仍然会失败。 / p>
如果我登录到开发Web服务器并自行安装,请确保在UI中选择了“所有用户”选项,如果我尝试其他自动部署,则会显示相同的行为。如果我确保没有在盒子上安装更新并启动自动部署,它将成功(在发出关于卸载无法卸载任何内容的警告之后),但是会因“源不可用”而失败“如果我在此之后再尝试其他自动部署,则会出错
包含MSI和MSI本身的文件夹的权限在dev,QA和Prod之间似乎相同。我没有关于AnthillPro不幸使用的帐户的密码(对公司安全而言很苛刻),但我至少可以访问某人,如果我这么倾向,他会做并且愿意检查一下。我确实使用这种方法确认当我安装最新版本的更新时,AnthillPro帐户可以看到它。
有没有人对可能导致此问题的原因有任何想法?
经过几年大量使用这个网站,我终于打破并发布我的第一个问题,所以如果这个场景看起来令人困惑或错综复杂,请保持温和。如有必要,我可以提供更多细节。
答案 0 :(得分:1)
我将回答此问题以供参考:将 ALLUSERS 属性设置为2必须已为每个用户而不是每台计算机安装了MSI。然后,只有安装产品的用户才会在添加/删除程序中看到它。
如果您see the documentation for ALLUSERS,您将看到强制每台机器安装的正常方法是ALLUSERS = 1。文档说明:“...值ALLUSERS = 2使系统能够重置ALLUSERS的值,以及安装上下文,具体取决于用户的权限和Windows的版本”。 换句话说,msiexec已由用户安装,因为缺少安装帐户权限。。在不同的操作系统上,此行为可能会有所不同。
在主要升级中的InstallInitialize之前运行RemoveExistingProducts操作后,可以通过自定义操作设置ALLUSERS = 1更改为每计算机安装状态。这涉及到测试,但是如果您使用先前为每个用户安装的相同帐户运行安装,现在只有管理权限。
答案 1 :(得分:0)
我最终解决了这个问题,只需卸载所有版本的Web应用程序,然后手动浏览注册表,删除对每个版本的Web应用程序名称,升级代码和各种产品代码的所有引用。
很多压力,但我终于明白了。将此留在这里可能会在将来提醒别人注册表始终是你的敌人。