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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/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
WiX包自定义配置文件_Wix_Bundle_Wix3.6 - Fatal编程技术网

WiX包自定义配置文件

WiX包自定义配置文件,wix,bundle,wix3.6,Wix,Bundle,Wix3.6,我有一个用创建的文件,它安装了我的可执行文件并复制了一个配置文件,该文件位于MSI文件附近。我可以在安装前更改配置文件,更改后的版本将复制到安装文件夹 <Component Id="ProductComponent" Guid="714DCBE1-F792-401E-9DDC-67BC1853BE14"> .... <File Source="Chiffa.exe.config" Compressed='no'/&g

我有一个用创建的文件,它安装了我的可执行文件并复制了一个配置文件,该文件位于MSI文件附近。我可以在安装前更改配置文件,更改后的版本将复制到安装文件夹

<Component Id="ProductComponent" 
           Guid="714DCBE1-F792-401E-9DDC-67BC1853BE14">
    ....
    <File Source="Chiffa.exe.config" 
          Compressed='no'/>
</Component>

....
这就是我想要的,我很高兴,但不满意,因为我需要安装一些其他软件包以及这个MSI文件。因此,我用WiX创建了一个捆绑项目,并将我所有可爱的MSI软件包放在其链中:

<Chain>
    .....
    <MsiPackage Compressed="yes"
                SourceFile="$(var.ChiffaSetup.TargetPath)"
                Vital="yes"
                Visible="no">
        <Payload SourceFile="Chiffa.exe.config"
                 Compressed="no"/>
    </MsiPackage>
</Chain>

.....
除了一件小事,一切都很好。我无法更改配置文件,因为bundle检查MSI包的一致性,但由于“哈希代码”问题而失败。

哈希代码问题是一项非常重要的功能,因为它可以检测不完整或损坏的下载。如果需要对配置文件进行任意更改,则只需为每次更改重新生成包


但是,如果可以为更改定义算法,则可以在安装项目中使用
XmlConfig
元素安装配置文件时更改配置文件,或者使用自己的自定义操作来更改配置文件。更改的数据可以完全在算法中定义,也可以通过各种机制传递:通过UI或命令行参数设置的Windows Installer属性。如果通过命令行参数设置,则可以从捆绑包中传递这些文件,而捆绑包可以从自定义BootstrapperApplication UI或其命令行中获取这些文件。

我认为解决方案是从MSI包中排除配置文件,并使用自定义操作复制文件(如果不存在配置文件,则创建默认值)。当然,如果有必要,操作可以对文件进行任何检查

但在卸载过程中,您必须添加代码来管理配置文件,等等。这是另一个自定义操作

诸如此类:

[CustomAction]
public static ActionResult CopyBootstraperConfig(Session session)
{
    try
    {
        const string configFile = "Chiffa.exe.config";

        var customConfig = Path.Combine(Path.GetDirectoryName(session["OriginalDatabase"]), configFile);
        var targetConfig = Path.Combine(session.GetTargetPath("INSTALLLOCATION"), configFile);
        if (File.Exists(customConfig))
            File.Copy(customConfig, targetConfig);
        try
        {
           //do file checks
        }
        catch (Exception e)
        {
            File.Delete(targetConfig);
            throw;
        }
    }
    catch (Exception e)
    {
        return ActionResult.Failure;
    }
    return ActionResult.Success;
}