如何始终安装功能

时间:2015-04-28 05:26:04

标签: installation wix windows-installer wix3.8

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

首次安装时可以正常工作。我的要求是每次运行安装程序时显示此对话框以及此“我的数据库”#39;功能已被选中。用户可以选择每次创建新数据库。如果db存在,它将显示一条消息并退出。

我设法每次都显示对话框,从用户那里获取输入。 但它不是第一次安装数据库。

我怎样才能每次安装它?

3 个答案:

答案 0 :(得分: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

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

答案 1 :(得分:0)

对于该对话框,该安装中的对话框将由条件驱动,并且通常您在InstallUISequence中具有类似于欢迎对话框的条件,其中包含“未安装”的条件,因此它仅显示第一次。所以这必须是你所拥有的那种导致DB对话框只在第一次显示的东西。您需要更改条件和结果流的对话框(下一步,后退等),以便每次添加要素或条件实际时都包含此对话框。

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

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

答案 2 :(得分:0)

我认为每次运行安装程序时都无法安装数据库功能,因为它已绑定到组件GUID。即使我设法显示ConnectionStringInputDialog,它第二次运行相同的安装程序时也没有做任何事情,因为它知道该功能已经安装。

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