0

我正在处理一个令人困惑的卸载/安装问题,我已经用尽了我的 google-foo,所以我来到这里希望有人能指出我正确的方向。

场景:我们使用 AnthillPro 将旧版 ASP 网站(内置于 VS2003)的夜间构建/部署到 Windows Server 2003 (x64 SP2) Web 服务器,并且在大多数情况下它工作正常。AnthillPro 帐户使用产品代码卸载前一天晚上的更新包,然后使用 MSI 的名称安装新的。

例子:
msiexec /qb /x {89B05BA3-679C-4120-BD6A-339BC3E726FD}
msiexec /qb /i "Update package.msi" PARAMETERVAL=X

这在我们的 QA 和生产 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(根据讨论)。

每次构建都会覆盖 MSI,因此原始 MSI 确实没有保留在执行安装的目录中,但如果我只是尝试重新部署已经存在的内容,它仍然会失败。

如果我登录到开发 Web 服务器并自己安装它,确保在 UI 中选择了所有用户选项,如果我尝试另一个自动部署,它会表现出相同的行为。如果我确保未在盒子上安装更新并启动自动部署,它将成功(在发出有关卸载无法卸载任何内容的警告之后),但随后将失败并显示“源不可用" 如果我​​在此之后尝试另一个自动部署,则会出错。

包含 MSI 的文件夹和 MSI 本身的权限在 dev、QA 和 Prod 之间似乎是相同的。不幸的是,我没有 AnthillPro 使用的帐户的密码(企业安全万岁),但如果我愿意的话,我至少可以访问那些愿意并愿意检查事情的人。我确实使用这种方法确认,当我安装 AnthillPro 帐户可以看到的最新版本的更新时。

有人对可能导致此问题的原因有任何想法吗?

在大量使用这个网站几年之后,我终于打破并发布了我的第一个问题,所以如果这种情况看起来令人困惑或令人费解,请保持温和。如有必要,我可以提供更多详细信息。

4

2 回答 2

1

我只是回答这个以供参考:将ALLUSERS属性设置为 2 必须已为每个用户而不是每台机器安装了 MSI。然后只有安装该产品的用户才能在添加/删除程序中看到它。

如果您查看 ALLUSERS 的文档,您将看到 ALLUSERS = 1 是强制每台机器安装的常规方法。文档指出:“...值 ALLUSERS=2 使系统能够重置 ALLUSERS 的值和安装上下文,具体取决于用户的权限和 Windows 版本”。换句话说, msiexec 已由用户安装,因为缺少安装帐户权限。. 这种行为在不同的操作系统上可能会有所不同。

在重大升级中的 InstallInitialize 之前运行 RemoveExistingProducts 操作之后,可以通过自定义操作设置 ALLUSERS = 1 更改为每台计算机的安装状态。这涉及到测试,但如果您使用以前为每个用户安装的相同帐户运行安装,则可以使用管理权限。

于 2014-01-28T15:09:36.853 回答
0

我最终通过简单地卸载所有版本的网络应用程序,然后手动浏览注册表并删除对网络应用程序名称、升级代码和每个版本的各种产品代码的所有引用来解决这个问题。

压力很大,但我终于想通了。将其留在这里可能会提醒将来的其他人注册表始终是您的敌人。

于 2012-05-17T17:17:08.717 回答