我有一个Windows Installer,它在WPF 4.5中有一个复杂的界面。它使用了几个其他使用WIX的其他组件创建的其他MSI安装程序文件,这些组件存在于子目录中,如:
我需要从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也会出现同样的错误。
答案 0 :(得分:-1)
我同意<CopyFile>
是一个更好的替代品。不过我曾尝试使用Robocopy,它对我有用。
<CustomAction Id="BaselineSync_Cmd" Property="BaselineSync" Execute="immediate"
Value=""robocopy" "[BUP]" "[PROD]" /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