从文本文件创建文件夹,并使用CustomAction将虚拟文件放入其中

时间:2010-05-25 18:00:39

标签: wix directory custom-action

我希望我的msi安装程序在特定位置生成一组文件夹,并在每个目录中放置一个虚拟文件。

目前我有以下CustomActions:

<CustomAction Id="SMC_SetPathToCmd" Property="Cmd" Value="[SystemFolder]cmd.exe"/>
<CustomAction Id="SMC_GenerateMovieFolders" Property="Cmd" ExeCommand="for /f &quot;tokens=* delims= &quot; %a in ([MBSAMPLECOLLECTIONS]movies.txt) do (echo %a)" />
<CustomAction Id="SMC_CopyDummyMedia" Property="Cmd" ExeCommand="for /f &quot;tokens=* delims= &quot; %a in ([MBSAMPLECOLLECTIONS]movies.txt) do (copy [MBSAMPLECOLLECTIONS]dummy.avi &quot;%a&quot;\&quot;%a&quot;.avi)" />

这些在InstallExecuteSequence:

中调用
  <Custom Action="SMC_SetPathToCmd" After="InstallFinalize"/>
  <Custom Action="SMC_GenerateMovieFolders" After="SMC_SetPathToCmd"/>
  <Custom Action="SMC_CopyDummyMedia" After="SMC_GenerateMovieFolders"/>

自定义操作似乎已启动,但仅显示空白命令提示符窗口,并且不会生成目录。

将惯例所需的文件复制到正确的目录:

  <Directory Id="WIX_DIR_COMMON_VIDEO">
    <Directory Id="MBSAMPLECOLLECTIONS" Name="MB Sample Collections" />
  </Directory>

<DirectoryRef Id="MBSAMPLECOLLECTIONS">
  <Component Id="SampleCollections" Guid="C481566D-4CA8-4b10-B08D-EF29ACDC10B5" DiskId="1">
    <File Id="movies.txt" Name="movies.txt" Source="SampleCollections\movies.txt" Checksum="no" />
    <File Id="series.txt" Name="series.txt" Source="SampleCollections\series.txt" Checksum="no" />
    <File Id="dummy.avi" Name="dummy.avi" Source="SampleCollections\dummy.avi" Checksum="no" />
  </Component>
</DirectoryRef>

这些自定义操作有什么问题,或者有更简单的方法吗?

1 个答案:

答案 0 :(得分:-1)

显而易见的问题是,这些自定义操作的排序方式不能正确支持托管(提升/ UAC)版本,也不具备MSI从修复,回滚,卸载,升级角度进行服务的任何概念。

如果不确切知道自己在做什么,很难给出确切的建议。我知道最近我有一个客户,他有一个带有一些“样本”的SDK,他希望按用户安装。我说服这个客户只分发ZIP文件并编写一个简单的winforms应用程序,它可以处理用户问题并将这些文件提取到用户选择的目录中。通过这种方式,他们可以部署多个样本实例,使用它们,删除它们,无需踩到MSI的脚趾。