0

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>

これらのカスタムアクションの何が問題になっていますか、またはこれを行うためのより簡単な方法はありますか?

4

1 に答える 1

-1

明らかな問題は、これらのカスタム アクションの順序付け方法が、マネージド (昇格/UAC) インストールを適切にサポートしないこと、または修復、ロールバック、アンインストール、アップグレードの観点から MSI によるサービスの概念がないことです。

あなたが何をしているのかを正確に知らずに、正確なアドバイスをすることは困難です. 私は最近、ユーザーごとにインストールしたいいくつかの「サンプル」を含む SDK を持っている顧客がいることを知っています。私はこの顧客に、ZIP ファイルを配布し、ユーザーにいくつかの質問をして、ユーザーが選択したディレクトリにこれらのファイルを抽出することを処理できる単純な winforms アプリを作成するように説得しました。このようにして、MSI の足を踏むことなく、サンプルの複数のインスタンスを展開し、それらで遊んで、それらを削除することができました。

于 2010-05-25T23:08:05.857 に答える