.net 如何使用新类型的安装程序干净地升级应用程序?

.net 如何使用新类型的安装程序干净地升级应用程序?,.net,windows,inno-setup,.net,Windows,Inno Setup,我有一个最初使用Visual Studio安装项目output.MSI安装程序的应用程序。出于各种原因,主要是这些安装项目的功能有限且令人困惑,我使用Inno Script Studio创建了一个安装程序来安装此应用程序的最新版本 它在新安装时运行良好,但在升级时,我们遇到了一些问题。客户端不希望让用户在安装新版本之前卸载旧版本。因此,我的目标是增强新安装程序,以解决升级中的一些问题: 从系统中删除应用程序的旧版本:A)开始菜单,B)添加/删除程序对话框,C)所有指向它的快捷方式图标。如果运行新

我有一个最初使用Visual Studio安装项目output.MSI安装程序的应用程序。出于各种原因,主要是这些安装项目的功能有限且令人困惑,我使用Inno Script Studio创建了一个安装程序来安装此应用程序的最新版本

它在新安装时运行良好,但在升级时,我们遇到了一些问题。客户端不希望让用户在安装新版本之前卸载旧版本。因此,我的目标是增强新安装程序,以解决升级中的一些问题:

  • 从系统中删除应用程序的旧版本:A)开始菜单,B)添加/删除程序对话框,C)所有指向它的快捷方式图标。如果运行新安装程序,它将在“添加/删除程序”框中显示应用程序的两个实例,并复制快捷方式图标。我不需要也不想删除任何应用程序的实际文件,因为它们可以简单地被覆盖,而其中一些文件应该保持不变
  • 在尝试安装组件之前,请先检查Inno脚本是否已安装组件(Framework EDI.NET,由原始应用程序安装程序安装)

  • 我非常感谢您对如何进行这些过程的思考。

    我只需要让新安装程序调用msi包,以静默方式删除旧版本。您可以通过拨打以下电话来完成此操作:

    msiexec /uninstall <Package.msi|ProductCode>
    
    msiexec/卸载
    


    完成后,恢复正常安装。由于您正在进行升级,自然,在删除旧版本之前,您会希望将任何配置导入新版本,以保留首选项等内容。

    Inno安装非常棒。我以为这会更难,但我甚至不需要写任何代码!当然,如果用户创建了一些额外的快捷方式,可能会有一些额外的快捷方式,但这基本上可以做到。添加如下所示的行:

    [InstallDelete]
    Type: files; Name: "{commondesktop}\UHINt 2.5.lnk"
    Type: files; Name: "{userstartmenu}\UHINt 2.5.lnk"
    Type: files; Name: "{commonprograms}\UHINt 2.5.lnk"
    Type: files; Name: "{userprograms}\UHINt 2.5.lnk"
    
    对于“添加/删除程序”中的条目,如下所示:

    [Registry]
    Root: HKLM32; Subkey: "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{{F0908904-B8CF-46E2-8AA1-2DC981ABDEEE}"; ValueType: none; Flags: deletekey;
    Root: HKLM64; Subkey: "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{{F0908904-B8CF-46E2-8AA1-2DC981ABDEEE}"; ValueType: none; Flags: deletekey;
    

    我相信,如果这对这种情况有效的话,这是一个更好的解决方案。在我的例子中,客户担心由于必须卸载和重新安装.NET组件(有一个交互式对话框,他们必须点击才能卸载),会牵制许多不太精明的用户。EDI.NET组件安装程序也是MSI吗?如果是这样,您可以使用
    /quiet
    静默运行它。如果由于所需的用户输入等原因而很难做到这一点,那么您甚至可以分解MSI并重新打包它以完成您需要的工作,因为MSI基本上只是带有嵌入式资源的XML清单。有很多工具可以让您导入MSI,但其中一个工具是。即使是EXE,安装程序的可执行文件通常只是围绕MSI的包装,因此提取也不太困难。Windows安装程序的良好做法是从Visual Studio安装程序MSI中找到升级代码GUID,然后在新安装程序中使用相同的代码。这意味着您可以从旧安装程序到新安装程序进行重大升级。我想举个例子,但我不熟悉Inno。