自动化Excel加载项的部署

本文关键字:部署 加载项 Excel 自动化 | 更新日期: 2023-09-27 18:22:35

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

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

我使用Msiexec、scriptcs等尝试了多种选项,但到目前为止没有任何成功。我的主要问题是,一旦现有的加载项卸载过程开始,它就会立即开始安装新的加载项,然后弹出标准窗口消息"安装已经在进行中…"

如有任何帮助,我们将不胜感激。

感谢

自动化Excel加载项的部署

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

Windows批处理文件不等待命令完成

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

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

它的工作原理应该是卸载在安装开始之前等待。

  • "呼叫"很重要
  • 对于以前版本的卸载,必须使用/x {ProductCode to fill in}而不是/x "filename"。在每种情况下,使用产品代码都更安全
  • 为了确定会发生什么,可以在两者之间和末尾添加一条pause

如果它似乎仍然不起作用,您必须循环,直到真正卸载产品,等待两秒钟,然后继续安装。

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

大多数人会推荐VB脚本作为最简单的解决方案,至少这些是最为人所知的。以下是来自saschchabeaumont的VBS片段,用于另一个问题的卸载调用:MSI安装失败,因为";该产品的另一个版本已经安装";

它主要查找给定产品名称(部分)的ProductCode,并在合适的情况下开始卸载(注意部分匹配)。如果卸载已经完成(=产品不再在已安装产品列表中),您可以将其用于相同的事情,并额外地第二次复制算法以异步询问。

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

这里有几件事:

  1. 第一个问题是,您是否知道Excel中的xlstart文件夹,该文件夹允许您在Excel启动时轻松加载某些加载项文件,只需将它们放入该文件夹即可。据我所知,你不能通过Excel GUI以这种方式禁用加载项,你必须将它们从xlstart文件夹中删除,才能不将它们加载到Excel中。

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

  3. 最后,您应该能够使用start wait msiexec.exe /i /qn File.msi让批处理文件等待msiexec从第一次msiexe调用返回。检查等待msiexec.exe完成。或者,您可以尝试使用批处理文件进行MSI软件部署。