WIX: скопировать файл в пользовательский каталог в другом разделе - PullRequest
4 голосов
/ 28 марта 2012

Мне нужно установить файлы моего приложения в обычное место, например C:\Program Files\MyApp
, а также скопировать несколько из них в пользовательскую папку в другом разделе
(скажем, D:\CustomFolder, разрешено жестко его кодировать),

Установка должна происходить без вывода сообщений - без графического интерфейса или мастера.И все должно быть в одном файле * .msi.

Я могу сделать это через CustomActions, но предпочтительнее элегантный декларативный способ.

Кто-нибудь пробовал это раньше?
Спасибо.

ОБНОВЛЕНИЕ : Забыл упомянуть, что файлы, которые должны находиться на отдельном разделе, могут находиться в C:\Program Files\MyApp

Ответы [ 3 ]

4 голосов
/ 28 марта 2012

решаемая. Подход:

  1. Укажите пользовательскую папку, в которую следует поместить файл:

    <Property Id="MY_CUSTOM_DESTINATION" Value="D:\MyCustomFolder" />

  2. Поместить директиву <Copy ..> в <File ...>, которую следует скопировать

<DirectoryRef Id="MyAppFolderThatIsInProgramFiles">
     <Component Id="MyComponent" Guid="some_guid">
      <File Id="MyFileXml" Source="MyFile.xml" KeyPath="yes" >
          <CopyFile Id="Copy_MyFileXml" DestinationProperty="MY_CUSTOM_DESTINATION"/>
      </File>
     </Component>
</DirectoryRef>

p.s. как побочный эффект, файл, указанный в <File Id="MyFileXml" ... />, будет помещен в оба местоположения: C:\Program Files\MyApp и D:\MyCustomFolder, но это правильно для моей задачи.

1 голос
/ 28 марта 2012

Это противоречит рекомендациям установщика Windows для жестких программных каталогов.Вы никогда не можете предположить, что всегда будет D: или даже C :.Тем не менее, клиенты спрашивали (требовали), чтобы я что-то установил в D: \ FOO.

Итак, как сделать клиента счастливым и заставить установку все еще «работать» на той виртуальной машине, у которой нет D:?Перенаправляя каталог во время установки с помощью специального действия, которое перенаправляет его только в том случае, если D: является фиксированным жестким диском.

Кроме того, хотя элемент CopyFile полезен, он на самом деле не нужен, поскольку вы можете просто создать файлыв компоненты дважды, и Smart Cabing гарантирует, что ваш MSI не будет раздуваться, если записи файлов указывают на одну и ту же запись в хранилище media \ cab.

0 голосов
/ 28 марта 2012

Вы можете просто описать структуру своего диска под тегом каталога:

<Property Id="DRIVE_1" Value="c:\" />
<Property Id="DRIVE_2" Value="d:\" />
<Property Id="DRIVE_3" Value="e:\" />

<Directory Id="TARGETDIR" Name="SourceDir">
    <Directory Id="DRIVE_1" />
    <Directory Id="DRIVE_2" />
    <Directory Id="DRIVE_3" />
</Directory>

Я бы не стал пропагандировать жесткое кодирование, но вы поняли идею.

...