部署项目不更新.exe

stu*_*rtd 11 c# deployment winforms

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

这是我正在做的事情:

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

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

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

Mik*_*sen 9

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

msiexec /i "project.msi" /l*v "c:\install.log"
Run Code Online (Sandbox Code Playgroud)

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

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

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

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


Inv*_*rse 5

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

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

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

"版本信息也被安装API使用."


RJ.*_*RJ. 5

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

我的问题与此问题相同,最终解决起来非常简单.上面的两个答案让我朝着正确的方向前进并帮助我弄清楚我的问题,但这里简单介绍一下.

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

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

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

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


小智 5

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

[assembly:AssemblyVersion("1.0.*")]

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