自动部署Excel AddIn

时间:2014-09-18 19:05:09

标签: c# excel deployment msiexec scriptcs

我使用AddIn Express .Net组件创建了一个Excel加载项。业务用户使用构建团队提供的MSI安装加载项。每当我们对产品进行任何更改并将其提供给业务用户时,他们都需要手动卸载现有的加载项,然后使用更新的MSI安装新的加载项。

我想知道是否有任何方法可以使用某些Windows批处理文件,脚本或小型C#控制台程序自动执行此过程。理想情况下,它应该卸载现有的加载项,等待卸载过程完成,然后安装新的AddIn。

我尝试使用Msiexec,scriptcs等多个选项,但到目前为止没有任何成功。我的主要问题是,一旦现有的加载项卸载过程启动,它会立即开始安装新的Addin,然后弹出标准的Windows消息,“安装已经在进行中......”

任何帮助都将不胜感激。

由于

2 个答案:

答案 0 :(得分:1)

我已经回答了一个似乎有帮助的类似问题:

Windows batch file does not wait for commands to complete

通常,当您有一个包含两行的批处理文件时:

call msiexec /x {...} /qb
call msiexec /i "c:\myPath\myProduct.msi" /qb

它应该在卸载在安装开始之前等待的意义上起作用。

  • " call"很重要!
  • 要卸载以前的版本,您必须使用/x {ProductCode to fill in}代替/x "filename"。在每种情况下使用产品代码都更安全。
  • 要确定会发生什么,您可以在两者之间和最后添加pause行。

如果它仍然无法正常工作,则必须循环直到产品真正卸载,等待两秒钟然后继续安装。

如果仍然安装了程序,有几种可能性可以找到。

大多数人会推荐使用VB脚本作为最简单的解决方案,至少这些是众所周知的。 以下是来自saschabeaumont的VBS片段,用于从另一个问题进行卸载调用: MSI Install Fails because "Another version of this product is already installed"

它主要找出给定productname(part)的ProductCode,如果适合,则开始卸载(注意部分匹配)。你可以使用它来做同样的事情,并另外复制算法第二次异步询问,如果卸载已经完成(=产品不再在已安装产品的列表中)。

当然可以使用其他脚本语言,即JScript,Powershell和传统编程语言。 在纯批处理脚本中很难做到 - 例如,如果安装了产品,您可以在 HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ Uninstall 下测试ProductCode注册表项。但只有一个缺点:如果从32/64位子系统启动批处理和/或MSI是32/64位,则必须考虑差异。因此,我建议使用VBS而不是批处理(您可以使用cscript xxx.vbs从批处理中调用它。)

答案 1 :(得分:0)

这里有一些事情:

  1. 第一个问题是,如果您了解Excel中的xlstart folder,它允许您在Excel启动时轻松加载某些插件文件,只需将它们放入此文件夹即可。据我所知,你无法通过Excel GUI以这种方式禁用插件,你必须将它们从xlstart文件夹中删除,不要将它们加载到Excel中。

  2. 第二个问题是您应该更新MSI文件以使用主要升级,以便在安装新MSI时自动删除现有MSI。这可能会消除您描述的整个问题。

  3. 最后,您应该能够使用start wait msiexec.exe /i /qn File.msi让您的批处理文件等待msiexec从第一次msiexec调用返回。检查Waiting for msiexec.exe to finish。或者您可以尝试MSI Software Deployment Using Batch File