【问题标题】:How to install a feature always如何始终安装功能
【发布时间】:2015-05-15 00:17:55
【问题描述】:

我的安装程序有一个名为“MyDatabase”的功能,它会显示一个对话框来接受输入“server, dbname, user, pwd”并创建指定的数据库。

第一次安装就可以了。我的要求是每次运行安装程序并选择此“MyDatabase”功能时都显示此对话框。用户可以选择每次都创建一个新的数据库。如果数据库存在,它将显示一条消息并退出。

我设法每次都显示对话框,以获取用户的输入。 但它不会安装数据库,除非是第一次。

我怎样才能让它每次都安装?

【问题讨论】:

  • 此应用程序中是否有随附的 application.exe 文件?如果是这样,请安装数据库的只读副本并将其复制到可写位置并通过您的应用程序而不是您的设置对其进行初始化。您可以多次执行此操作。

标签: installation wix windows-installer wix3.8


【解决方案1】:

让我稍微充实一下答案:当您使用 MSI 安装文件时,它会使用 组件 GUID 指向它。 MSI 文件认为它“拥有”该文件,因为您为其提供了唯一的 GUID,并且会在卸载时愉快地删除该文件(这也可能作为主要升级的一部分发生),即使您已修改该文件并且它已满的用户数据。这是许多设置中非常常见的设计缺陷。

您可以通过将组件设置为永久解决此问题,如以下答案所述:MSI Reference Counting: Two products install the same MSIs。然而,更好的概念是只安装只读文件并使用您的应用程序本身来初始化用户数据(ini 文件、数据库、xml 设置文件等... ) 通过将只读模板复制到用户配置文件和/或通过应用程序内部默认值(在源代码中定义)设置它们。这将用户设置和数据文件的部署与安装程序分离,避免意外删除用户数据,并允许您以更高的灵活性处理来自应用程序的所有用户数据设置并控制此收益。并且您可以避免使设置复杂化,这已经足够复杂了,如下所述:What is the benefit and real purpose of program installation?

许多人认为他们的设置应该卸载所有用户数据。 不要去那里。我的看法是,用户修改的任何内容都是用户数据,如果用户重新安装产品或如果他们想保留他们的数据以导入其他应用程序。相反,您可以记录数据的存储位置,并让人员或系统管理员手动清除它。清除所有用户数据将涉及清除所有用户配置文件。虽然您可以使用诸如 ActiveSetup 之类的概念来完成此操作 (another ActiveSetup explanation),但通常麻烦多于其价值且容易出错。

有关组件 GUID 概念的更多理解,请参阅此答案:Change my component GUID in wix?(推荐阅读您的用例)。以下是 installsite.net 上关于如何初始化和更新用户配置文件和用户数据的讨论:http://forum.installsite.net/index.php?showtopic=21552

类似的答案(用于跟踪) - 我一遍又一遍地写同样的答案;-):

【讨论】:

    【解决方案2】:

    就对话框而言,该安装中的对话框将由条件驱动,通常您会在 InstallUISequence 中看到类似欢迎对话框的内容,其条件包括“未安装”,因此它仅显示第一次。因此,这一定是您拥有的那种导致 DB 对话框仅在第一次显示的东西。每次添加功能或任何实际条件时,您都需要更改条件和对话框的结果流(下一步、返回等)以包含此对话框。

    另一半是某处必须有代码,一个自定义操作,并且同样的条件是仅在第一次安装时运行,并且条件类似于未安装。所以你会找到它并给它与对话框相同的条件。您可能需要考虑“每次运行安装程序”的真正含义是什么?可能不是卸载;维修期间?什么时候删除功能?

    这种事情通常(至少根据我的经验)通过实际的应用程序完成,而不必再次进行安装。您不会遇到这些“我什么时候运行它”的问题;编码和调试也更加直接。

    【讨论】:

      【解决方案3】:

      我认为每次运行安装程序时都无法安装数据库功能,因为它已绑定到组件 GUID。尽管我设法显示了 ConnectionStringInputDialog,但在我第二次运行相同的安装程序时它什么也没做,因为它知道该功能已经安装。

      所以,我最终创建了一个单独的 C# Windows 应用程序,并将该应用程序包含在安装程序中。用户可以根据需要多次运行App,并根据需要运行sql脚本(作为资源文件嵌入到App中)。

      【讨论】:

        猜你喜欢
        • 2015-11-06
        • 1970-01-01
        • 1970-01-01
        • 2013-07-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-01-14
        • 1970-01-01
        相关资源
        最近更新 更多