0

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

目前我有以下自定义操作:

<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>

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

4

1 回答 1

-1

明显的问题是这些自定义操作的排序方式不能正确支持托管(提升/UAC)安装,或者从修复、回滚、卸载、升级的角度来看,MSI 没有任何服务概念。

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

于 2010-05-25T23:08:05.857 回答