安装程序不会覆盖现有应用程序

Cra*_*aig 28 setup-project visual-studio-2010

我有一个包含8个项目的Visual Studio 2010解决方案.它还有一个我用来创建安装的安装项目.

它是在客户端PC上首次安装时工作正常.但是,然后我修改了我的项目,并构建了一个新的安装程序,并将其传递给客户端.发生这种情况时,客户端必须首先手动卸载上次安装,然后运行安装程序.

如果他们运行安装程序,没有卸载,它似乎不会覆盖现有文件(exe和dll).通常它只是被修改的exe.但是,它不会覆盖它.客户端计算机上的版本似乎保持不变.

有没有办法强制它覆盖?

请注意,当我修改我的主应用程序项目时,我会转到项目的属性,程序集信息,并增加程序集版本以及文件版本.

Sha*_*lde 34

如果您对安装有很好的控制,那么Visual Studio安装程序与商业产品甚至WiX相比,并不是最友好的用户.

当您拥有Visual Studio安装项目时,您将拥有升级过程中涉及的多个属性

1)升级代码 - 这是同类安装程序之间的链接,您不应该不必要地更改此代码

2)版本号 - 奇怪的是只有前3个数字(major.minor.build)用于比较(这是许多开发人员常犯的错误)

3)产品代码 - 一旦您更改版本号,VS将提示您更改此号码 - 执行此操作 - 如果您自动更改号码,请记住执行此操作

4)DetectNewerInstalledVersion - 设置为True

5)RemovePreviousVersions - 设置为True

就个人而言,我会考虑使用WiX进行如此小的安装,即如果你可以在Visual Studio中使用WiX版本

我的OpenCover安装程序如下所示

<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi" >

<Product Id="*" Name="OpenCover" Language="1033" Version="!(bind.FileVersion.OPENCOVER_FRAMEWORK_DLL)" 
        Manufacturer="OpenCover @ GitHub" UpgradeCode="2250c3f1-d9ba-44d8-b4db-25f91fe92dc6">

    <Package InstallerVersion="200" Compressed="yes" />

    <Upgrade Id="2250c3f1-d9ba-44d8-b4db-25f91fe92dc6">
        <UpgradeVersion OnlyDetect="no" Property="PREVIOUSFOUND" Minimum="1.0.0.0" IncludeMinimum="yes"
                        Maximum="!(bind.FileVersion.OPENCOVER_FRAMEWORK_DLL)" IncludeMaximum="no" />

        <UpgradeVersion OnlyDetect="yes" Property="NEWERFOUND" Minimum="!(bind.FileVersion.OPENCOVER_FRAMEWORK_DLL)"
                        IncludeMinimum="yes" />
    </Upgrade>

    <Media Id="1" Cabinet="media1.cab" EmbedCab="yes" />

...

</Wix>
Run Code Online (Sandbox Code Playgroud)

我希望你能找到以上有用的东西

  • AssemblyVersion&AssemblyFileVersion的程序集应该与您提到的设置一起更改,以使覆盖发生. (3认同)

小智 6

尽管按照上述步骤操作,我也遇到了 .exe 未更新的问题。.exe 的产品版本似乎不会自动遵循安装属性中设置的版本号。对于运行新安装程序时要替换的 .exe,请按如下所示增加产品版本:

1) 转到项目属性 > 应用程序 > 程序集信息...

2)增加Assembly和File版本号

3) 再次构建安装程序,安装应覆盖旧的 .exe

希望这对某人有帮助。

  • 您不需要增加程序集版本,只需增加文件版本。文件版本默认为 AssemblyVersion,但这会搞乱绑定到程序集的客户端。只需增加 AssemblyFileVersion 即可,您可以不理会 AssemblyVersion。 (2认同)

Bue*_*ler 5

在安装项目的属性中,更改版本/内部版本号.这将提示您允许生成新的GUID.这样做会告诉安装程序您有新版本,并允许自动删除旧版本的程序,并由MSI系统安装新版本.