Wpf WIX MSI安装程序能否复制安装程序中不存在的完全外部文件?

Wpf WIX MSI安装程序能否复制安装程序中不存在的完全外部文件?,wpf,wix,windows-installer,xcopy,Wpf,Wix,Windows Installer,Xcopy,我有一个Windows安装程序,它在WPF 4.5中有一个复杂的界面。它使用其他几个MSI安装程序文件,这些文件是使用WIX为其他几个组件创建的,这些文件位于子目录中,如: InstallerRotDirectory WPF_可执行_文件[主安装程序] 档案室 档案室 目录A 目录 目录 MSI安装程序1 MSI安装程序2 我需要从WIX创建的MSI安装程序2能够将文件\u B复制到目标机器上此组件的安装目录 文件B是在运行时从WPF\u可执行文件创建的,在MSI构建时不可用 我可以

我有一个Windows安装程序,它在WPF 4.5中有一个复杂的界面。它使用其他几个MSI安装程序文件,这些文件是使用WIX为其他几个组件创建的,这些文件位于子目录中,如:

  • InstallerRotDirectory
    • WPF_可执行_文件[主安装程序]
    • 档案室
    • 档案室
    • 目录A
    • 目录
    • 目录
      • MSI安装程序1
      • MSI安装程序2
我需要从WIX创建的MSI安装程序2能够将
文件\u B
复制到目标机器上此组件的安装目录

文件B
是在运行时从
WPF\u可执行文件创建的,在MSI构建时不可用

我可以直接通过WIX来完成这项工作,还是需要使用自定义操作

我尝试了以下代码,但出现了错误:

<Component Id="cmpA9616EB16BF74D7E90C6CD0D590A18ED" Directory="dir39B22699688E51DCD8DCBB99A47E835B" Guid="{DAD3EA2B-830F-482C-8F2F-EEB3C49E6373}">
<CopyFile SourceDirectory="../../[SourceDir]" SourceName="abc.xml"  DestinationProperty="dir39B22699688E51DCD8DCBB99A47E835B" Id="copyfile1" />
</Component>

错误:SourceDirectory属性的值不是合法标识符

使用SourceProperty也会产生同样的错误。

我同意
是更好的替代方法。然而,我尝试了机器人技术,它对我很有效

<CustomAction Id="BaselineSync_Cmd" Property="BaselineSync" Execute="immediate"
    Value="&quot;robocopy&quot; &quot;[BUP]&quot; &quot;[PROD]&quot; /PURGE /e" />
<CustomAction Id="BaselineSync" BinaryKey="WixCA" DllEntry="CAQuietExec" Execute="deferred" Return="ignore" Impersonate="no"/>

<InstallExecuteSequence>
    <Custom Action="BaselineSync_Cmd" After="StartServices"><![CDATA[NOT(Installed)]]></Custom>
    <Custom Action="BaselineSync" After="BaselineSync_Cmd"><![CDATA[NOT(Installed))]]></Custom>
</InstallExecuteSequence>

在这种情况下,我在调用安装程序时传递BUP和PROD值。比如:
msiexec/i BUP=C:\somefolderpath PROD=C:\someotherfolderpath/qn/l*v install.log

我认为您需要使用自定义操作路径。如果运行.exe是生成该文件的唯一方法,则在尝试复制该文件之前,需要执行此操作。您的另一个选择是让exe在运行文件时将其复制到所需的目录,并在MSI安装程序2中删除文件副本。
元素是这种情况下的正确方法。如果你指定你得到的错误,它会有帮助。我已经更新了问号中的错误。CopyFile将起作用。你只需要正确地获得详细信息。你只需要实际的目录名,我很确定你不能用…\,如果我不能用…\。。那么我将如何转到[SourceDir]的父目录?有没有办法获取父目录?