Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Installation 基于模块的软件的设置_Installation_Wix_Setup Project_Bootstrapper - Fatal编程技术网

Installation 基于模块的软件的设置

Installation 基于模块的软件的设置,installation,wix,setup-project,bootstrapper,Installation,Wix,Setup Project,Bootstrapper,我开发了一个分为两部分的Modulebase软件。 第一部分是服务(基本软件),第二部分是一些可以添加到此服务的模块 立即声明: 我已经为服务(BaseSoftware)创建了Wix设置。但是现在我需要安装模块。每个模块都应该有自己的MSI设置 问题: 在安装模块之前,必须先安装BaseSoftware 解决方案: 我想我可以在模块设置中进行自定义操作,询问系统是否已经安装了BaseSoftware。如果不是,请启动BaseSoftware的设置,然后继续模块设置 但是我真的不知道什么是最佳实践

我开发了一个分为两部分的
Modulebase软件。
第一部分是
服务(基本软件)
,第二部分是
一些可以添加到此服务的模块

立即声明:
我已经为服务(BaseSoftware)创建了Wix设置。但是现在我需要安装模块。每个模块都应该有自己的MSI设置

问题:
在安装模块之前,必须先安装BaseSoftware

解决方案:
我想我可以在模块设置中进行自定义操作,询问系统是否已经安装了BaseSoftware。如果不是,请启动BaseSoftware的设置,然后继续模块设置


但是我真的不知道什么是最佳实践。

在您的服务安装程序中,写一个注册表值,指示您的服务已安装-下面是一个将安装目录写入注册表的示例(您应该自定义注册表项)


在模块安装程序中,您可以检查该密钥,如果不存在则失败:

    <!-- Require Service to be installed already -->
    <Property Id="SERVICEPATH">
        <RegistrySearch Id="ServicePath" Root="HKLM" Key="SOFTWARE\My Company\My Service" Name="InstallPath" Type="raw" />
    </Property>
    <Condition Message='The Service is not installed. Please install the Service first, and then this module.'><![CDATA[Installed OR (SERVICEPATH <> "")]]></Condition>

"")]]>

请确保在服务安装程序中使用相同的注册表项,写入一个注册表值以指示已安装服务-以下是将安装目录写入注册表的示例(您应该自定义注册表项)


在模块安装程序中,您可以检查该密钥,如果不存在则失败:

    <!-- Require Service to be installed already -->
    <Property Id="SERVICEPATH">
        <RegistrySearch Id="ServicePath" Root="HKLM" Key="SOFTWARE\My Company\My Service" Name="InstallPath" Type="raw" />
    </Property>
    <Condition Message='The Service is not installed. Please install the Service first, and then this module.'><![CDATA[Installed OR (SERVICEPATH <> "")]]></Condition>

"")]]>

确保使用相同的注册表项

您的解决方案听起来不错,但BaseSoftware安装程序不会创建注册表项,我会按您的方式创建注册表项好的,我发现了问题,它将注册表项写入X64注册表我的示例在我的安装程序中正常运行,但是,我确实使用我的包元素的平台属性将我的安装程序设置为64位:您能提供一个完整的工作示例吗?也许在Github上?我昨天做的东西没有正常工作-你需要wix工具集工具在你的路径上,运行build.cmd生成2个msi-尝试运行模块安装-它将失败。然后完全运行服务安装,然后再次运行模块安装-它将继续运行您的解决方案听起来不错,但BaseSoftware安装程序不创建注册表项,我按您的方式执行。好的,我发现了问题,它将该项写入X64注册表。我的示例在我的安装程序中正常工作,但是,我确实使用我的包元素的平台属性将我的安装程序设置为64位:您能提供一个完整的工作示例吗?也许在Github上?我昨天做的东西没有正常工作-你需要wix工具集工具在你的路径上,运行build.cmd生成2个msi-尝试运行模块安装-它将失败。然后完全运行服务安装,然后再次运行模块安装-它将继续