WIX MSI安装程序可以复制安装程序中不存在的完全外部文件吗?

时间:2014-05-28 09:01:44

标签: wpf wix windows-installer xcopy

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

  • InstallerRootDirectory
    • WPF_Executable_File [主安装程序]
    • FILE_A
    • FILE_B
    • Directory_A
    • Directory_B
    • Directory_c
      • MSI Installer 1
      • MSI Installer 2

我需要从WIX创建的MSI Installer 2能够将File_B复制到目标计算机上此组件的安装目录。

File_B在运行时从WPF_Executable_File创建,在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也会出现同样的错误。

1 个答案:

答案 0 :(得分:-1)

我同意<CopyFile>是一个更好的替代品。不过我曾尝试使用Robocopy,它对我有用。

<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