0

私はWiXを使用してインストーラーを作成しています(そして、私はそれを本当に楽しんでいないと言わなければなりませんが、それはWiXのせいではなく、MSIのせいです。そして私はRob Menschingのここや他の場所での有用性を絶対に称賛します)。

次のようなコンポーネントを作成することは可能ですか。

  • 更新可能(パッチおよびメジャーアップグレードを介して)
  • インストール後に変更されたファイルはアンインストールされません(変更されていない場合でもアンインストールされないかどうかは関係ありません)
  • 更新時には通常のファイルバージョン管理ルールが適用されます(つまり、インストール後に変更されたバージョン管理されていないファイルは更新されません。その他のファイルは更新されます)

私はこれが不可能だと思い始めています。コンポーネントを永続的なものとしてマークすることは、コンポーネントがアンインストールされないことを意味します。つまり、更新可能ではありません(少なくともメジャーアップグレードではなく、パッチはどうですか?)。

コンポーネントにNeverOverwriteのマークを付けると、ユーザーがバージョン管理されていないkeyFileを変更した場合でも(したがって、ユーザーの作業が削除された場合でも)、コンポーネントのアンインストールが妨げられることはありません。

たとえ否定的であっても、私はすべての決定的な答えに感謝します。

4

1 に答える 1

0

私は試していませんが、おそらくカスタム アクションを使用してこれを行うことができます。例については、MSI から WiX へ、パート 5を参照してください。Custom Action Type 38例には次のものが含まれます。

<Directory Id="INSTALLDIR" Name="Minimal" LongName="MinimalInstallation">
  <Component Id="Component1"
             Guid="{A77C5B06-132D-4884-8E17-EA10A83C812D}">
    <File Id="ReadMe" DiskId="1" Name="Readme.txt" Source="Readme.txt" Vital="yes" KeyPath="yes" />
    <!--RemoveFile Id="RemoveCopy" Name="ReadMe2.txt" On="uninstall" /-->
  </Component>
</Directory>

....

<CustomAction Id="CopyReadMe"
              Script="vbscript">
  <![CDATA[
  Set fso = CreateObject("Scripting.FileSystemObject")
  path = Session.Property("INSTALLDIR")
  fso.CopyFile path & "ReadMe.txt", path & "ReadMe2.txt"
  ]]>
</CustomAction>

<InstallExecuteSequence>
  <Custom Action="CopyReadMe" After="InstallFinalize">Not Installed</Custom>
</InstallExecuteSequence>

ここで Readme.txt がインストールされ、vbscript カスタム アクションを使用して ReadMe2.txt にコピーされます。vbscript でバージョンや更新日をチェックすると、ReadMe2.txt が上書きされるかどうかを自分で制御できます。また、RemoveFile がないと、wix はファイルの存在を認識しないため、ReadMe2.txt をアンインストールしません。

アップグレードの場合、別のカスタム アクションを使用して、インストールする前に ReadMe2.txt を Readme.txt にコピーすることができます。そうすれば、通常のファイルのバージョン管理ルールを Wix に処理させて、Readme.txt を更新できるかどうかを判断できます。その後、vbscript にバージョン処理を追加する必要はありません。

于 2012-04-11T16:51:22.857 に答える