自动部署Excel AddIn

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

我想知道是否有什么办法可以使用一些Windowsbatch file,脚本或一个小的C#控制台程序自动执行此过程。 理想情况下,它应该卸载现有的加载项,等待卸载过程完成,然后安装新的AddIn。

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

任何帮助,将不胜感激。

谢谢

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

Windowsbatch file不会等待命令完成

通常情况下,当你有一个包含两行的batch file时:

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

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

  • “通话”很重要!
  • 要卸载以前的版本,您必须使用/x {ProductCode to fill in}而不是/x "filename" 。 在每种情况下使用产品代码是更安全的。
  • 为了确定会发生什么,您可以在两者之间添加一个pause行,并在最后添加一个pause行。

如果它仍然不工作,你必须循环,直到产品真正卸载,等待两秒钟,然后进行安装。

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

大多数人会推荐VB脚本作为最简单的解决scheme,至less这些是最知名的。 这里是一个来自saschabeaumont的VBS片段,用于从另一个问题进行卸载调用: MSI安装失败,因为“该产品的另一个版本已经安装”

它主要查找给定产品名称(部件)的ProductCode,并开始卸载,如果适合(注意部分匹配)。 如果卸载已经完成(=产品不再位于已安装产品列表中),则可以将其用于同一事物,并再次复制该algorithm以asynchronous提问。

当然,在其他脚本语言中也是可以的,也就是JScript,Powershell和传统编程语言。 在纯批处理脚本中执行操作非常困难 – 例如,如果安装了产品,则可以在HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ Uninstall下testingProductCoderegistry项。 但是只有一个缺点要提到:如果批处理是从32/64位子系统启动的,并且/或者MSI是32/64位,则必须考虑差异。 因此,我build议改为使用VBS而不是批处理(您可以使用cscript xxx.vbs从批处理中调用它)。

这里有几件事情:

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

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

  3. 最后,你应该可以使用start wait msiexec.exe /i /qn File.msi让你的batch file等待msiexec从第一个msiexec调用返回。 检查等待msiexec.exe完成 。 或者您可以尝试MSI软件部署使用batch file 。