我有一个Winforms项目,其中包含一个.exe文件作为主要输出。我正在使用部署项目来分发它,但是在安装新版本时没有更新.exe文件,这意味着我必须要求用户手动卸载然后安装新版本。
这就是我正在做的事情:
我确信在成功之前我已经做到了,但我现在似乎无法做到这一点。我究竟做错了什么?
编辑:我通过更改项目属性中的文件版本来实现它,就像在this answer
中一样答案 0 :(得分:9)
很难说可能导致这种情况的原因。如何安装不删除以前版本的MSI?我建议运行不使用详细日志记录的安装。我会从命令行运行它,如下所示:
msiexec /i "project.msi" /l*v "c:\install.log"
/ l告诉msiexec(安装程序服务)创建日志,*告诉它记录所有内容,v告诉它使用详细模式。
运行它,看看日志文件,它应该告诉你什么是失败的以及为什么。你也可以在这里发布那个日志文件,我打赌我们可以在一起找到一些东西。
附加问题:日志文件使安装程序认为无所事事。当您声明更新文件版本时,您要更新什么?如何部署包含的文件?您是否将它们作为“主要输出”包含在安装项目中,或者您是否直接包含组件?您是否已确定依赖关系并自动包含它们,或者您是否包含项目输出?
更新有关自动升级MSI需要更改的内容的说明,请参阅此文章。 Question 511789
答案 1 :(得分:5)
您的应用程序的可执行文件可能没有更新,因为您没有增加MFC项目中的VERSION信息资源。
仅增加安装项目版本是不够的。见下文:
http://msdn.microsoft.com/en-us/library/6fkzft86.aspx
“安装API也使用版本信息。”
答案 2 :(得分:5)
最后在将我的头撞在墙上几个小时后才想到这一点。
我的问题与此问题相同,最终解决起来非常简单。上面的两个答案让我朝着正确的方向前进,帮助我弄清楚我的问题,但简而言之。
如果您将RemovePreviousVersion设置为true,则问题很可能出现在程序集信息按钮下的应用程序设置中。
我按照 msiexec / i“project.msi”/ l * v“c:\ install中显示的 mohlsen 运行了日志。记录“并以相同的响应结束,不会覆盖;不会补丁;现有文件版本相同
Inverse 向我指出了正确的方向,但也让我稍微放弃了MFC参考。我正在编写一个Windows应用程序,最后将两个和两个放在一起,然后转到我在应用程序选项卡下编写的应用程序的属性。有一个名为Assembly Information的按钮,它指向程序集版本和文件版本。我增加了这些,现在我的.exe文件更新了。
所以你必须做两件事,在你正在编写的应用程序中增加实际的程序集版本以及安装包的版本。
答案 3 :(得分:5)
另外一个提示:如果打开项目的AssemblyInfo.cs文件,并将AssemblyVersion更改为
[assembly:AssemblyVersion(“1.0。*”)]
然后每次构建项目时都会自动更新程序集版本信息。然后注释掉或从同一文件中删除AssemblyFileVersion条目,因此文件版本默认与程序集版本相同。这意味着每次构建文件版本时文件版本都会自动更新,因此您只需更新安装程序版本即可按预期覆盖文件。
答案 4 :(得分:1)
您是否在应用程序运行时尝试更新?如果是这样,那将是不可能的。您需要考虑更好的方法,例如使用小型外部应用程序来终止当前正在运行的进程,并安装更新,然后重新启动新版本。
答案 5 :(得分:1)
您可以尝试在解决方案上进行重建。当你在它的时候你也可以清理它。我可以看到,如果您所有更改的内容文件都会发生这种情况。如果没有,那就不要理会。 p>