2012-04-10 2 views
1

У меня есть установщик wix, и он копирует некоторые файлы в некоторые каталоги. Каждый файл объявляется как отдельный компонент, а какой-то путь - если каталог не существует, программа установки создаст его и разместит там файл.Wix - как предотвратить переписывание всего каталога?

Что я хочу сделать: если каталог уже существует, программа установки не должна копировать туда какие-либо файлы (даже если файл не существует, его нельзя копировать в уже существующий каталог).

Но невозможно установить «Never overwrite» в каталог, так как я могу предотвратить копирование новых файлов в уже существующий каталог? Есть ли какое-либо условие (что-то вроде «есть каталог существует»), который я могу использовать здесь?

ответ

1

Есть ли какое-либо условие (что-то вроде «есть каталог существует»), который я могу использовать здесь?

Да, вы можете использовать Состояние элемента, как это:

<Directory Id="FooFolder" Name="Foo"> 
    <Component Id="SomeId"> 
     <File Source="..." /> 
     <Condition>Not FOO_FOLDER_ALREADY_EXISTS</Condition> 
    </Component> 
</Directory> 

вид вещей, которые вы можете использовать в качестве условия объясняются в Conditional Statement Syntax документации установщика Windows.

В этом случае, я полагаю, вы можете установить FOO_FOLDER_ALREADY_EXISTS свойство с DirectorySearch, как это:

<Property Id="FOO_FOLDER_ALREADY_EXISTS"> 
    <DirectorySearch Id="FooFolderSearch" Path="[FooFolder]" /> 
</Property> 

редактировать: по-видимому, поиск каталога выше не работает, потому что [FooFolder] свойство разрешается только во время действия CostFinalize (см. documentation). Но поиск каталога уже происходит до этого во время действия AppSearch.

Я не уверен, как обойти это. Вероятно, это связано с установкой свойства FOO_FOLDER_ALREADY_EXISTS после CostFinalize с помощью настраиваемого действия вместо поиска в каталоге установщика Windows.

+0

Как установить путь как относительный, внутри каталога назначения?У меня есть ID ID MYSQL: SETUP_MODE = "FirstComputer" Но это теперь работает: user1209216

0

В отношении того, как избежать проблемы с синхронизацией с заданием, установленным до завершения его завершения, другим надежным способом борьбы с ним является запись свойств в реестр.

Я считаю, что это самая распространенная проблема, связанная с проблемами времени с установкой свойств, и позволяет установщику отслеживать эти свойства для uninstalls и т. Д. Я использовал его для отличного эффекта.

Здесь a good article by Rob Mensching о том, как это сделать, чтобы вы начали.

Смежные вопросы