2009-04-30 60 views
11

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

下面是我在做什么:

  • 我增加对输出项目程序集的版本(这是部署项目的主输出)
  • 我增加部署项目版本(更新
  • 部署项目设置为删除以前的版本
  • 上的.exe“永久性”属性提示时产品代码)设置为False

我确信我在成功之前完成了这个任务,但我现在似乎无法做到。我究竟做错了什么?

编辑:我得到了它通过改变文件版本在项目属性的工作,如this answer

+0

+1为一个良好的工作解决方案。这很有帮助。 – 2010-10-14 21:42:46

回答

9

很难说什么可能会导致此。你如何安装不删除以前版本的MSI?我会建议运行不适用于详细日志记录的安装。我想从这样的命令行运行它:

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

/升告诉MSIEXEC(它是安装服务)创建日志,*告诉它记录的一切,和v告诉它用详细模式。

运行该程序,并查看日志文件,它应该告诉您什么是故障以及为什么。你也可以在这里发布这个日志文件,我打赌我们可以一起找到一些东西。

附加问题:日志文件使它看起来像安装程序认为没有什么可做的。当你说你更新文件版本时,你在更新什么?你如何将这些文件进行部署?你在安装项目中是否包含它们作为“主要输出”?或者你是否直接包含程序集?你是否确定了依赖项并自动包含它们,或者是否包含项目输出?

UPDATE查看这篇文章了解需要更改以自动升级MSI的内容。 Question 511789

+1

我在日志中发现了这个: 文件:C:\ Program Files文件(x86)\ Company \ Project \ Project.exe; \t不会被覆盖; \t不会打补丁; \t \t现有文件的版本是相同的 我该怎么做才能让它看到文件已经改变? – stuartd 2009-04-30 13:14:00

+0

现在看文件。编辑原始问题并将日志链接放在那里,以便其他人可以更容易地找到它。 – 2009-04-30 14:43:24

+0

感谢您的帮助,我想我现在已经开始工作了。 我注意到您提到的问题陈述为: “升级代码不应该改变” – stuartd 2009-04-30 15:38:16

1

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

+0

不,应用程序未运行。 – stuartd 2009-04-30 12:14:05

1

您可能会尝试在解决方案上进行重建。你也可以在清理时清理它。我可以看到如果所有更改都是内容文件,情况会如何。如果不是的话,那就无视了。

5

最后在将我的头靠在墙上撞了几个小时后终于明白了这一点。

我的问题与此相同,最终解决起来非常简单。上面的两个答案使我朝着正确的方向发展,并帮助我找出了自己的问题,但这里简而言之。

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

我跑的日志为mohlsen显示在上面,MSIEXEC/I “project.msi”/ L * V “C:\ install.log的” 答案,并结束了相同的反应, 不会被覆盖;不会修补;现有文件是相等的版本

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

所以你必须做两件事情,增加你正在编写的应用程序中的实际汇编版本以及安装包的版本。

5

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

[装配:的AssemblyVersion( “1.0 *”)]

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