Как использовать элемент WIX CopyFile для копирования файла при изменении/восстановлении в системную папку без его установки в цель?

У меня проблема, связанная с выполнением CopyFile при изменении/восстановлении при использовании WIX для настройки msi.

У меня есть функция, в которой есть компонент, который копирует/перемещает файл из исходной папки в папку, уже существующую где-то внутри пользовательской системы. Это не папка моего приложения. Я только перемещаю этот файл и не устанавливаю его в цель. Эта функция работает нормально, если я устанавливаю ее с помощью полной установки. Но когда при начальной установке я решил не устанавливать эту функцию, а затем попытался установить ее во время «изменения», все остальные настраиваемые действия/компоненты внутри функции выполняются/устанавливаются, за исключением компонента CopyFile. Это критично для моей установки, и если она не будет скопирована, моя установка потерпит неудачу.

Просто интересно, нашел ли кто-нибудь решение подобной проблемы или когда-либо сталкивался с подобной проблемой?


person sttaq    schedule 20.02.2012    source источник
comment
Можете ли вы установить файл в это место, а не копировать его из другого места?   -  person Alexey Ivanov    schedule 21.02.2012
comment
да, я попробовал, и это работает. Пока я или кто-либо другой не найдет решение, я буду использовать этот подход, но в идеале я хотел бы предотвратить дублирование, чтобы уменьшить размер установки.   -  person sttaq    schedule 21.02.2012
comment
Итак, вам нужны файлы в обоих местах, не так ли? WiX должен справиться с этой ситуацией и сохранить только одну версию файла в CAB.   -  person Alexey Ivanov    schedule 21.02.2012
comment
Что говорят журналы msi в режиме «изменения»? Должна быть причина, по которой он пропускает копирование этого файла.   -  person Alexey Ivanov    schedule 21.02.2012
comment
Файл журнала пропускает весь этот шаг — без какой-либо информации — когда я пытаюсь использовать режим изменения. Если я продолжу обычным способом, это покажет, что он действительно переместил файл. и да, мне нужен файл в обоих местах, но не в моем ЦЕЛЕВОМ КАТАЛОГЕ. Если бы он был у меня и там, то я бы держал его в трех местах.   -  person sttaq    schedule 21.02.2012
comment
Я понимаю. Является ли целевой файл ключевым файлом компонента в добавленной функции? При установке с изменением MSI проверяет наличие только файлов ключей. Если ключевой файл существует, компонент будет пропущен. Вы использовали подробные журналы: /lvx*?   -  person Alexey Ivanov    schedule 21.02.2012
comment
У меня нет элемента File в моем компоненте. У меня есть только CopyFile внутри моего компонента, и я установил для его атрибута KeyPath значение yes. Этот компонент упакован с другими компонентами внутри функции. Эта функция ссылается на компонент, у которого есть ключевые файлы, которые могут быть установлены с другими функциями. Это выглядит немного странно, так как во время изменения моя установка установит все другие компоненты, в которых есть файл, но пропустит тот, который имеет только CopyFile и имеет его KeyPath установлен в да. Я пробовал подробное ведение журнала, и он не показывает, что он пропускает установку. Просто не появляется в нем.   -  person sttaq    schedule 21.02.2012
comment
в любом случае спасибо за изучение этого :)   -  person sttaq    schedule 22.02.2012


Ответы (1)


Компонент, содержащий операцию CopyFile, настроен неправильно. Он должен иметь фактический файл или запись реестра в качестве ключевого пути.

Хотя установщик Windows использует компоненты для управления ресурсами, ключевой путь компонента является основным фактором, который определяет, установлен компонент или нет.

Таким образом, компонент без ресурса в качестве ключевого пути никогда не будет установлен, и содержащаяся в нем операция CopyFile никогда не будет выполнена.

person cosmin    schedule 31.03.2012
comment
Я поместил файл в этот компонент, и он работает таким образом. Но дело в том, что он дублирует этот файл, чего я изначально старался избегать. Я также установил для атрибута KeyPath значение true. Я попытаюсь разместить запись реестра с помощью CopyFile и посмотреть, сработает ли это. Скоро сообщу. - person sttaq; 02.04.2012
comment
Я безуспешно пытался следовать ‹Component Id=copyComponent Guid=GUID› ‹CopyFile Id=File2Copy SourceName=File.ext SourceProperty=SourceDir DestinationProperty=DEST/› ‹RegistryKey Root=HKLM Key=Software Action=create› ‹RegistryKey Key=productKey Action=createAndRemoveOnUninstall› ‹RegistryValue Action=write Name=KeyName Type=integer Value=0 KeyPath=Yes /› ‹/RegistryKey› ‹/RegistryKey› ‹/Component› - person sttaq; 03.04.2012