部署项目不更新.exe

我有一个Winforms项目,其中包含一个.exe文件作为主要输出。 我正在使用部署项目来分发它,但是在安装新版本时没有更新.exe文件,这意味着我必须要求用户手动卸载然后安装新版本。

这就是我正在做的事情:

  • 我在输出项目(这是部署项目的主要输出)上增加程序集版本
  • 我增加了部署项目版本(并在出现提示时更新产品代码)
  • 部署项目设置为删除以前的版本
  • .exe上的’Permanent’属性设置为False

我确信在成功之前我已经做到了,但我现在似乎无法做到这一点。 我究竟做错了什么?

编辑:我通过更改项目属性中的文件版本来实现它,就像在这个答案中一样

很难说是什么导致了这一点。 如何安装不删除以前版本的MSI? 我建议运行不使用详细日志记录的安装。 我会从命令行运行它,如下所示:

msiexec /i "project.msi" /l*v "c:\install.log" 

/ l告诉msiexec(安装程序服务)创建日志,*告诉它记录所有内容,v告诉它使用详细模式。

运行它,看看日志文件,它应该告诉你什么是失败的和为什么。 你也可以在这里发布那个日志文件,我打赌我们可以一起找到一些东西。

附加问题:日志文件使安装程序认为没有任何操作。 当您声明更新文件版本时,您要更新什么? 如何部署包含的文件? 您是否将它们作为“主要输出”包含在安装项目中,或者您是否直接包含组件? 您是否已确定依赖关系并自动包含它们,或者您是否包含项目输出?

更新请参阅此文章,了解需要更改以自动升级MSI的说明。 问题511789

您的应用程序的可执行文件可能没有更新,因为您没有增加MFC项目中的VERSION信息资源。

仅增加安装项目版本是不够的。 见下文:

http://msdn.microsoft.com/en-us/library/6fkzft86.aspx

“安装API也使用版本信息。”

终于在把头撞到墙上好几个小时后想出来了。

我的问题与此问题相同,最终解决起来非常简单。 上面的两个答案让我朝着正确的方向前进并帮助我弄清楚了我的问题,但简而言之。

如果将RemovePreviousVersion设置为true,则问题很可能出现在程序集信息按钮下的应用程序设置中。

我按照mohlsen在上面的答案中显示的那样运行日志, msiexec / i“project.msi”/ l * v“c:\ install.log”并最终得到相同的响应, 不会覆盖; 不会补丁; 现有文件的版本相同

Inverse指出了我正确的方向,但也让我稍微离开了MFC参考。 我正在编写一个Windows应用程序,最后将两个和两个放在一起,然后转到我在应用程序选项卡下编写的应用程序的属性。 有一个名为Assembly Information的按钮,它指向程序集版本和文件版本。 我增加了这些,现在我的.exe文件更新。

因此,您必须做两件事,在您正在编写的应用程序中增加实际的程序集版本以及安装程序包的版本。

另外一个提示:如果打开项目的AssemblyInfo.cs文件,并将AssemblyVersion更改为

[assembly:AssemblyVersion(“1.0。*”)]

然后每次构建项目时都会自动更新程序集版本信息。 然后注释掉或从同一文件中删除AssemblyFileVersion条目,因此文件版本默认与程序集版本相同。 这意味着每次构建文件版本时文件版本都会自动更新,因此您只需更新安装程序版本即可按预期覆盖文件。

您是否在应用程序运行时尝试更新? 如果是这样,那是不可能的。 您需要考虑更好的方法,例如使用小型外部应用程序来终止当前正在运行的进程,并安装更新,然后重新启动新版本。

您可以尝试在解决方案上进行重建。 你也可以在它的时候清理它。 我可以看到,如果您所有更改的内容文件都会发生这种情况。 如果没有,那么无视。