WiX包自定义配置文件
我有一个用创建的文件,它安装了我的可执行文件并复制了一个配置文件,该文件位于MSI文件附近。我可以在安装前更改配置文件,更改后的版本将复制到安装文件夹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
<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;
}