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
C# Wix在自定义操作中将组件复制到多个文件夹_C#_Wix - Fatal编程技术网

C# Wix在自定义操作中将组件复制到多个文件夹

C# Wix在自定义操作中将组件复制到多个文件夹,c#,wix,C#,Wix,如何将安装项目中的一个文件复制到目标计算机中的多个文件夹 但我的想法是: 公共类自定义操作 { [海关行动] 公共静态操作结果CustomAction1(会话) { session.Log(“开始定制操作1”); Microsoft.Win32.RegistryKey hkcu=Microsoft.Win32.Registry.CurrentUser; string keyname=“软件\\SomeApp\\extpath”; 字符串keyValue=hkcu.GetValue(“路径模板”)

如何将安装项目中的一个文件复制到目标计算机中的多个文件夹

但我的想法是:

公共类自定义操作
{
[海关行动]
公共静态操作结果CustomAction1(会话)
{
session.Log(“开始定制操作1”);
Microsoft.Win32.RegistryKey hkcu=Microsoft.Win32.Registry.CurrentUser;
string keyname=“软件\\SomeApp\\extpath”;
字符串keyValue=hkcu.GetValue(“路径模板”).ToString();
列表路径=解析路径(keyValue);
foreach(路径中的变量路径)
{
复制(/*可能是组件?*/);
}
返回操作结果。成功;
}
私有静态列表解析路径(字符串keyValue)
{
返回keyValue.Split(新字符串[]{;“},StringSplitOptions.RemoveEmptyEntries.ToList();
}

我不想在programm文件夹中安装组件,我需要将安装程序中的文件放在以前找到的路径中。我应该在自定义操作中执行此操作吗?还是应该以其他方式执行此操作?

为此创建自定义操作是不必要的,这意味着您还必须手动删除文件(因为MSI不会意识到)

从内存中,您应该为每个文件创建一个
组件
(或者为所有文件创建一个组件,但是如果您打算修补或合并,最好单独创建)

例如


然后您应该能够在另一个目录/ComponentGroup/Feature中引用它

<ComponentGroup Id="SomeGroupId">
      <ComponentRef Id="myComponentId"/>
</ComponentGroup>


这应该是一般的想法,抱歉,这是基于我的一个安装程序,我还没有测试过。

你可能会被这个注册表项卡住,但是考虑一下对应用程序设计的一些推送;目标不应该是在安装程序上丢弃复杂性,因为它似乎使应用程序更简单或允许延迟T。安装程序设计直到应用程序完成。请参阅。这些文件是一个模板。在我知道模板的路径之前,我无法安装它们。目标计算机上有另一个程序。我不知道文件“SomeFile.ext”的安装路径直到安装程序启动。删除程序后,文件可能会保留。您不需要知道安装路径,它们只需要一个默认路径。在我上面的示例中,D.WEBSITE\u安装是一个目录,路径将在您运行安装程序时确定。但是,如果您需要在卸载后保留文件,我建议使用自定义操作“路径将在您运行安装程序时确定”否。路径。我不知道有多少路径。没关系,您可以在安装程序中配置任意数量的路径并将其存储在属性中。或者,如果它们都位于同一根文件夹中,则作为单个属性,如上所述。
<ComponentGroup Id="SomeGroupId">
      <ComponentRef Id="myComponentId"/>
</ComponentGroup>