Wix, не включать файл в msi или cab
От: Lexa-Lexa Россия www.agrobase.ru
Дата: 20.03.09 09:29
Оценка:
Доброго времени суток всем.

Вопрос следующего содержания...
Использую Wix 3, очень нужно сделать так, что бы инсталлятор цеплял файл, который просто лежит рядом с msi, что бы в дальнейшем не меняя инсталятор можно было заменять этот файл на более новый. как?
--

Автоматизированная справочная система "Сельхозтехника"
Re: Wix, не включать файл в msi или cab
От: Lexa-Lexa Россия www.agrobase.ru
Дата: 24.03.09 09:29
Оценка:
Здравствуйте, Lexa-Lexa, Вы писали:

LL>Доброго времени суток всем.


LL>Вопрос следующего содержания...

LL>Использую Wix 3, очень нужно сделать так, что бы инсталлятор цеплял файл, который просто лежит рядом с msi, что бы в дальнейшем не меняя инсталятор можно было заменять этот файл на более новый. как?

Люди добрые , ну помогите... тяжело с Wix разобраться с ходу то.
Суть в общем:
если рядом с msi лежит base.dat (база данных) при установке кинуть его в CommonAppData папочку (сзаменой существующего), если не лежит — установить прогу без него (предпологается что в этом случае base.dat уже есть у пользователя).
Думаю, можно ли организовать это чере CustomAction (на C# dll )и написать соответствующую код, реально ли?
--

Автоматизированная справочная система "Сельхозтехника"
Re[2]: Wix, не включать файл в msi или cab
От: baily Россия  
Дата: 24.03.09 11:15
Оценка:
Здравствуйте, Lexa-Lexa, Вы писали:

LL>Здравствуйте, Lexa-Lexa, Вы писали:


LL>>Доброго времени суток всем.


LL>>Вопрос следующего содержания...

LL>>Использую Wix 3, очень нужно сделать так, что бы инсталлятор цеплял файл, который просто лежит рядом с msi, что бы в дальнейшем не меняя инсталятор можно было заменять этот файл на более новый. как?

LL>Люди добрые , ну помогите... тяжело с Wix разобраться с ходу то.

LL>Суть в общем:
LL>если рядом с msi лежит base.dat (база данных) при установке кинуть его в CommonAppData папочку (сзаменой существующего), если не лежит — установить прогу без него (предпологается что в этом случае base.dat уже есть у пользователя).
LL>Думаю, можно ли организовать это чере CustomAction (на C# dll )и написать соответствующую код, реально ли?

Добавь атрибут Compressed="no" к элементу File, который описывает данный файл. Тогда он не будет включен в состав msi-пакета, а будет лежать с ним.
Re[2]: Wix, не включать файл в msi или cab
От: -af  
Дата: 29.03.09 20:28
Оценка:
Здравствуйте, Lexa-Lexa, Вы писали:

LL>>Доброго времени суток всем.


LL>>Вопрос следующего содержания...

LL>>Использую Wix 3, очень нужно сделать так, что бы инсталлятор цеплял файл, который просто лежит рядом с msi, что бы в дальнейшем не меняя инсталятор можно было заменять этот файл на более новый. как?

LL>Люди добрые , ну помогите... тяжело с Wix разобраться с ходу то.

LL>Суть в общем:
LL>если рядом с msi лежит base.dat (база данных) при установке кинуть его в CommonAppData папочку (сзаменой существующего), если не лежит — установить прогу без него (предпологается что в этом случае base.dat уже есть у пользователя).
LL>Думаю, можно ли организовать это чере CustomAction (на C# dll )и написать соответствующую код, реально ли?

Вам конечно поможет такая конструкция
<Component Id="base.dat" Guid="{XXX}">
<CopyFile Id="CopyExternalFile" SourceName="base.dat" SourceProperty="SourceDir" DestinationName="base.dat" DestinationDirectory="CommonAppData"/>
</Component>

но прежде чем вставить это подумайте как у Вас будет работать reinstall
(наверно при reinstall нужно будет требовать оригинальный msi,
тут вам пригодиться ResolveSource Action http://msdn.microsoft.com/en-us/library/aa371232(VS.85).aspx).
Re[3]: Wix, не включать файл в msi или cab
От: Lexa-Lexa Россия www.agrobase.ru
Дата: 30.03.09 05:37
Оценка:
Здравствуйте, -af, Вы писали:

-af>Вам конечно поможет такая конструкция

-af><Component Id="base.dat" Guid="{XXX}">
-af> <CopyFile Id="CopyExternalFile" SourceName="base.dat" SourceProperty="SourceDir" DestinationName="base.dat" DestinationDirectory="CommonAppData"/>
-af></Component>

-af>но прежде чем вставить это подумайте как у Вас будет работать reinstall

-af>(наверно при reinstall нужно будет требовать оригинальный msi,
-af>тут вам пригодиться ResolveSource Action http://msdn.microsoft.com/en-us/library/aa371232(VS.85).aspx).

спасибо большое. Постараюсь покопать в эту сторону. Но мне нужен достаточно хитрый механизм работы с этим файлом и я уже начал писать custom action на C# который позволит выполнить все действия. Ну и понятное дело возникли вопросы :
1. Как можно в custom action определить место, где лежит дистрибутив?
2. Если например в custom action возникнет ошибка как сделать что бы установщик сказал? "не удается скопировать файл. Повторить/отмена"
3. Как можно в custom action определить суть процесса: install, reinstall, deinstallation

вот такой я любознательный заранее спасибо
--

Автоматизированная справочная система "Сельхозтехника"
Re[4]: Wix, не включать файл в msi или cab
От: -af  
Дата: 30.03.09 07:08
Оценка:
Здравствуйте, Lexa-Lexa, Вы писали:

LL>Здравствуйте, -af, Вы писали:


-af>>Вам конечно поможет такая конструкция

-af>><Component Id="base.dat" Guid="{XXX}">
-af>> <CopyFile Id="CopyExternalFile" SourceName="base.dat" SourceProperty="SourceDir" DestinationName="base.dat" DestinationDirectory="CommonAppData"/>
-af>></Component>

-af>>но прежде чем вставить это подумайте как у Вас будет работать reinstall

-af>>(наверно при reinstall нужно будет требовать оригинальный msi,
-af>>тут вам пригодиться ResolveSource Action http://msdn.microsoft.com/en-us/library/aa371232(VS.85).aspx).

LL>спасибо большое. Постараюсь покопать в эту сторону. Но мне нужен достаточно хитрый механизм работы с этим файлом и я уже начал писать custom action на C# который позволит выполнить все действия. Ну и понятное дело возникли вопросы :

LL>1. Как можно в custom action определить место, где лежит дистрибутив?
LL>2. Если например в custom action возникнет ошибка как сделать что бы установщик сказал? "не удается скопировать файл. Повторить/отмена"
LL>3. Как можно в custom action определить суть процесса: install, reinstall, deinstallation

LL>вот такой я любознательный заранее спасибо


Ну зачем Вы пытаетесь усложнить себе жизнь, и по сути изобрести велосипед (не забудте, кстати, что Вам RollBack еще потдерживать, чтобы велосипед ездил . Managed кастом акция, в даном случае это не к селу ни к городу.
Да и если к указаному примеру кода добавить условия, в которых фигрирует BASE_SOURCE и BASE_DESTINATION, то у вас все 3 пункта выполнятся.

Ответы на Ваши вопросы зависят как вы пишите ManagedCA, используя Deployment Tools Foundation или System.Configuration.Install

1 -> http://msdn.microsoft.com/en-us/library/aa371857(VS.85).aspx
2 -> http://msdn.microsoft.com/en-us/library/aa371672(VS.85).aspx
3 -> http://msdn.microsoft.com/en-us/library/aa371645(VS.85).aspx
http://msdn.microsoft.com/en-us/library/aa371648(VS.85).aspx
а deinstallation это от лукавого, нет такого.

ps, пишите хороший сетап, подумайте о людях, для кого Вы пишите.
<Property Id="BASE_SOURCE" Secure="yes">
<DirectorySearch Id="BASE_SOURCEDirectorySearch" Path="SourceDir" Depth="0">
<FileSearch Id="BASE_SOURCEFileSearch" ShortName="base.dat" />
</DirectorySearch>
</Property>

<Property Id="BASE_DESTINATION" Secure="yes">
<DirectorySearch Id="BASE_DESTINATIONDirectorySearch" Path="CommonAppData" Depth="0">
<FileSearch Id="BASE_DESTINATIONFileSearch" ShortName="base.dat" />
</DirectorySearch>
</Property>
Re[5]: Wix, не включать файл в msi или cab
От: Lexa-Lexa Россия www.agrobase.ru
Дата: 30.03.09 08:05
Оценка:
Спасибо! буду копать!

-af>.... чтобы велосипед ездил

А велосипед я люблю, снег дотает и поеду

-af>ps, пишите хороший сетап, подумайте о людях, для кого Вы пишите.


Да... я уже призадумался, и сильно, после того как мой старый сетап уже 100 раз преподнес сюрпризов пользователям. Но он правда не был на wix , а был написан просто дефолтным студийным способом
--

Автоматизированная справочная система "Сельхозтехника"
Re[5]: Wix, не включать файл в msi или cab
От: Lexa-Lexa Россия www.agrobase.ru
Дата: 30.03.09 09:48
Оценка:
Извините конечно за навязчивость...
может дело и в том что я первый день работаю, а до этого болел неделю... но..

-af>Ответы на Ваши вопросы зависят как вы пишите ManagedCA, используя Deployment Tools Foundation или System.Configuration.Install

в vs 2008 проект-новый-wix-C# custom action, как то так. И на чем я пишу? ))))

-af>1 -> http://msdn.microsoft.com/en-us/library/aa371857(VS.85).aspx

-af>2 -> http://msdn.microsoft.com/en-us/library/aa371672(VS.85).aspx
-af>3 -> http://msdn.microsoft.com/en-us/library/aa371645(VS.85).aspx
-af>http://msdn.microsoft.com/en-us/library/aa371648(VS.85).aspx
Посмотрел, здорово, токо в упор не пойму как заюзать ComponentCurrentState, нет у объекта session такого ))))

В общем у меня ща есть в .wxs:
<Binary Id="CopyBase" SourceFile="..\CustomActions.CA.dll" />
<CustomAction Id="DoCopyBase" BinaryKey="CopyBase" DllEntry="CustomActionCopyBase" />
<InstallExecuteSequence>
...
<Custom Action="DoCopyBase" After="InstallFinalize"></Custom>
...

а в .cs :
namespace CustomActions
{
public class CustomActions
{
[CustomAction]
public static ActionResult CustomActionCopyBase(Session session)
{
у session нет и половины того, о чем пишут

и кроме того как я выяснил экшн вызывается тока при установке, при исправлении или удалении — нет, почему?
--

Автоматизированная справочная система "Сельхозтехника"
Re[6]: Wix, не включать файл в msi или cab
От: -af  
Дата: 30.03.09 13:34
Оценка:
Здравствуйте, Lexa-Lexa, Вы писали:

LL>Извините конечно за навязчивость...

LL>может дело и в том что я первый день работаю, а до этого болел неделю... но..

-af>>Ответы на Ваши вопросы зависят как вы пишите ManagedCA, используя Deployment Tools Foundation или System.Configuration.Install

LL>в vs 2008 проект-новый-wix-C# custom action, как то так. И на чем я пишу? ))))

-af>>1 -> http://msdn.microsoft.com/en-us/library/aa371857(VS.85).aspx

-af>>2 -> http://msdn.microsoft.com/en-us/library/aa371672(VS.85).aspx
-af>>3 -> http://msdn.microsoft.com/en-us/library/aa371645(VS.85).aspx
-af>>http://msdn.microsoft.com/en-us/library/aa371648(VS.85).aspx
LL>Посмотрел, здорово, токо в упор не пойму как заюзать ComponentCurrentState, нет у объекта session такого ))))

LL>В общем у меня ща есть в .wxs:

LL><Binary Id="CopyBase" SourceFile="..\CustomActions.CA.dll" />
LL><CustomAction Id="DoCopyBase" BinaryKey="CopyBase" DllEntry="CustomActionCopyBase" />
LL><InstallExecuteSequence>
LL> ...
LL> <Custom Action="DoCopyBase" After="InstallFinalize"></Custom>
LL>...

LL>а в .cs :

LL>namespace CustomActions
LL>{
LL> public class CustomActions
LL> {
LL> [CustomAction]
LL> public static ActionResult CustomActionCopyBase(Session session)
LL> {
LL>у session нет и половины того, о чем пишут

LL>и кроме того как я выяснил экшн вызывается тока при установке, при исправлении или удалении — нет, почему?



LL>в vs 2008 проект-новый-wix-C# custom action, как то так. И на чем я пишу? ))))

Вы используете Deployment Tools Foundation , он с wix поставляется.

Очень плохо делать что-то (изменяющее систему) после InstallFinalize, после него можно только редми показывать.
Правильно использовать Deffered или Commit кастом акцию http://msdn.microsoft.com/en-us/library/aa368268.aspx.

LL>Посмотрел, здорово, токо в упор не пойму как заюзать ComponentCurrentState, нет у объекта session такого ))))

в DTF есть такой класс ComponentInfo, он вам поможет.

Еще раз повторюсь, очень плохая архитектура у Вас.
ps.
Но для счастья своего не бери себе его:
Много, много непокоя принесет оно с собою
Re[7]: Wix, не включать файл в msi или cab
От: Lexa-Lexa Россия www.agrobase.ru
Дата: 30.03.09 14:18
Оценка:
Спасибо... копаю...

-af>Еще раз повторюсь, очень плохая архитектура у Вас.

-af>ps.
-af> Но для счастья своего не бери себе его:
-af> Много, много непокоя принесет оно с собою

может предложите правильную?
Постараюсь ясно описать суть всего.

Приложение работает с бд (base.dat).
Устанавливается с CD диска.
А обновлятся должно уметь:
1. через интернет (обновляется как ПО так и информация в БД) — это все отличненько работает
2. через MSI (тут начинаются запары)
2.1 у некоторых клиентов программу ставит сисадмин, соотв у пользователей нет прав на обновление ПО, они спокойненько обновляют только БД. Когда появляется обновление ПО сисадмин скачивает новый msi (без base.dat — он большой) и запускает процесс обновления через GPO.
Тут ес-но у пользователя должна остаться его base.dat нетронутая, а рядом с msi скорее всего файла base.dat и лежать не должно.
2.2 некоторым пользователям обновления программы приходят на новом CD (соотв. обновленный msi и новая base.dat) — здесь инсталятор должен заменить ПО + base.dat[/b] тоже!
3. при repear инсталяции соответственно base.dat вообще не должен трогаться...

Вроде так. Ну и простой вывод отсюда напрашивается: есть base.dat рядом с msi — скопируй и замени, нет — не трогай

спасибо за внимание...
--

Автоматизированная справочная система "Сельхозтехника"
Re[8]: Wix, не включать файл в msi или cab
От: -af  
Дата: 30.03.09 19:10
Оценка:
Здравствуйте, Lexa-Lexa, Вы писали:

LL>может предложите правильную?


Ну Вы даете!!! Ведь все написал, и примеры привел. Что же еще нужно? Готовую реализацию?
Хорошо, не поленюсь скопировать из предыдущего + добавлю, пожалуй, удаление при uninstall.

<Property Id="BASE_SOURCE" Secure="yes">
<DirectorySearch Id="BASE_SOURCEDirectorySearch" Path="[SOURCEDIR]" Depth="0">
<FileSearch Id="BASE_SOURCEFileSearch" Name="base.dat" />
</DirectorySearch>
</Property>

<DirectoryRef Id="TARGETDIR">
<Component Id="base.dat" Guid="{B1065BB5-CC40-43a3-B18E-373C725615C2}">
<Condition>BASE_SOURCE</Condition>
<CopyFile Id="CopyExternalFile" SourceName="base.dat" SourceProperty="SourceDir" DestinationName="base.dat" DestinationDirectory="CommonAppDataFolder" />
<RemoveFile Id="RemoveExternalFile" Directory="CommonAppDataFolder" Name="base.dat" On="uninstall"/>
</Component>
</DirectoryRef>
Re[9]: Wix, не включать файл в msi или cab
От: Lexa-Lexa Россия www.agrobase.ru
Дата: 31.03.09 05:51
Оценка:
Здравствуйте, -af, Вы писали:

-af>Здравствуйте, Lexa-Lexa, Вы писали:


LL>>может предложите правильную?


-af>Ну Вы даете!!! Ведь все написал, и примеры привел. Что же еще нужно? Готовую реализацию?

-af>Хорошо, не поленюсь скопировать из предыдущего + добавлю, пожалуй, удаление при uninstall.

.....


Спасибо это все работает. Но кроме одного случая
Представим, что есть инсталятор с версией 1.0.0 и 1.1.0. Причем инсталятор 1.1.0 даем пользователю без базы данных.
В нем строки: <RemoveExistingProducts After="InstallInitialize" /> — т.е. удаляется версия 0.. а она за собой и базу подтирает, а новый уже не ставит...
Если написать <RemoveExistingProducts After="InstallFinalize" /> — база не удаляется уже, но так она не будет инсталятором 2 заменяться, если будет присутствовать...

Как вывод, конечно, можно не удалять файл базы инсталятором, но тут проблема снова. Если файл присутствует, то он не перезаписывается новым, а мне надо!
--

Автоматизированная справочная система "Сельхозтехника"
Re[10]: Wix, не включать файл в msi или cab
От: -af  
Дата: 31.03.09 07:11
Оценка:
Здравствуйте, Lexa-Lexa, Вы писали:

LL>Спасибо это все работает. Но кроме одного случая

LL>Представим, что есть инсталятор с версией 1.0.0 и 1.1.0. Причем инсталятор 1.1.0 даем пользователю без базы данных.
LL>В нем строки: <RemoveExistingProducts After="InstallInitialize" /> — т.е. удаляется версия 0.. а она за собой и базу подтирает, а новый уже не ставит...
LL>Если написать <RemoveExistingProducts After="InstallFinalize" /> — база не удаляется уже, но так она не будет инсталятором 2 заменяться, если будет присутствовать...

LL>Как вывод, конечно, можно не удалять файл базы инсталятором, но тут проблема снова. Если файл присутствует, то он не перезаписывается новым, а мне надо!


При <RemoveExistingProducts After="InstallInitialize" /> Вы можете не удалять при Upgrade (используйте UPGRADINGPRODUCTCODE)
При <RemoveExistingProducts After="InstallFinalize" /> Вы можете предварительно удалить (используйте BASE_DESTINATION AND BASE_SOURCE см. ответ 4, и тот же RemoveExternalFile)
Re[11]: Wix, не включать файл в msi или cab
От: Lexa-Lexa Россия www.agrobase.ru
Дата: 31.03.09 08:26
Оценка:
Здравствуйте, -af, Вы писали:

-af>При <RemoveExistingProducts After="InstallInitialize" /> Вы можете не удалять при Upgrade (используйте UPGRADINGPRODUCTCODE)

-af>При <RemoveExistingProducts After="InstallFinalize" /> Вы можете предварительно удалить (используйте BASE_DESTINATION AND BASE_SOURCE см. ответ 4, и тот же RemoveExternalFile)

Попробовал сделать так:
<Component Id="BaseOldRemove" Guid="{6BF1952F-A607-4eb6-9605-AFE720E56343}">
<Condition>(UPGRADINGPRODUCTCODE AND BASE_SOURCE) OR NOT UPGRADINGPRODUCTCODE</Condition>
<RemoveFile Id="RemoveExternalFile" Name="base.txt" On="uninstall"></RemoveFile>
</Component>

т.е. я понимаю так: удалить если обновляем и есть новый файл-база или удалить если не обновляем (т.е. видимо удаляем))))
это с <RemoveExistingProducts After="InstallInitialize" />

не работает удаляется файл в случае обновления и отсутствия нового файла — я уже на него похож
--

Автоматизированная справочная система "Сельхозтехника"
Re[12]: Wix, не включать файл в msi или cab
От: Аноним  
Дата: 31.03.09 09:45
Оценка:
Здравствуйте, Lexa-Lexa, Вы писали:

LL>Здравствуйте, -af, Вы писали:


-af>>При <RemoveExistingProducts After="InstallInitialize" /> Вы можете не удалять при Upgrade (используйте UPGRADINGPRODUCTCODE)

-af>>При <RemoveExistingProducts After="InstallFinalize" /> Вы можете предварительно удалить (используйте BASE_DESTINATION AND BASE_SOURCE см. ответ 4, и тот же RemoveExternalFile)

LL>Попробовал сделать так:

LL><Component Id="BaseOldRemove" Guid="{6BF1952F-A607-4eb6-9605-AFE720E56343}">
LL> <Condition>(UPGRADINGPRODUCTCODE AND BASE_SOURCE) OR NOT UPGRADINGPRODUCTCODE</Condition>
LL> <RemoveFile Id="RemoveExternalFile" Name="base.txt" On="uninstall"></RemoveFile>
LL></Component>

LL>т.е. я понимаю так: удалить если обновляем и есть новый файл-база или удалить если не обновляем (т.е. видимо удаляем))))

LL>это с <RemoveExistingProducts After="InstallInitialize" />

LL>не работает удаляется файл в случае обновления и отсутствия нового файла — я уже на него похож


Вы написали следующее:
компонента BaseOldRemove устанавливается если выполнено условие (UPGRADINGPRODUCTCODE AND BASE_SOURCE) OR NOT UPGRADINGPRODUCTCODE,
файл удаляется всегда при удалении этой компоненты (если компонента не была установлена, файл не удалять).

Не проверял, но должно работать.

...
<RemoveExistingProducts After="InstallFinalize" />
...

<Property Id="BASE_SOURCE" Secure="yes">
<DirectorySearch Id="BASE_SOURCEDirectorySearch" Path="[SOURCEDIR]" Depth="0">
<FileSearch Id="BASE_SOURCEFileSearch" Name="base.dat" />
</DirectorySearch>
</Property>

<Property Id="BASE_DESTINATION" Secure="yes">
<DirectorySearch Id="BASE_DESTINATIONDirectorySearch" Path="CommonAppDataFolder" Depth="0">
<FileSearch Id="BASE_DESTINATIONFileSearch" ShortName="base.dat" />
</DirectorySearch>
</Property>

<DirectoryRef Id="TARGETDIR">
<Component Id="base.dat" Guid="{XXX}">
<Condition>BASE_SOURCE</Condition>
<CopyFile Id="CopyExternalFile" SourceName="base.dat" SourceProperty="SourceDir" DestinationName="base.dat" DestinationDirectory="CommonAppDataFolder" />
</Component>

<Component Id="RemovePerviousFile" Guid="{XXX}">
<Condition>BASE_DESTINATION AND BASE_SOURCE</Condition>
<RemoveFile Id="RemovePrevieusFile" Directory="CommonAppDataFolder" Name="base.dat" On="install"/>
</Component>
</DirectoryRef>
Re[13]: Wix, не включать файл в msi или cab
От: Lexa-Lexa Россия www.agrobase.ru
Дата: 31.03.09 10:38
Оценка:
Здравствуйте, Аноним, Вы писали:


А>Вы написали следующее:

А>компонента BaseOldRemove устанавливается если выполнено условие (UPGRADINGPRODUCTCODE AND BASE_SOURCE) OR NOT UPGRADINGPRODUCTCODE,
А>файл удаляется всегда при удалении этой компоненты (если компонента не была установлена, файл не удалять).

А>Не проверял, но должно работать.


А>...

А><RemoveExistingProducts After="InstallFinalize" />
А>...

А><Property Id="BASE_SOURCE" Secure="yes">

А><DirectorySearch Id="BASE_SOURCEDirectorySearch" Path="[SOURCEDIR]" Depth="0">
А><FileSearch Id="BASE_SOURCEFileSearch" Name="base.dat" />
А></DirectorySearch>
А></Property>

А><Property Id="BASE_DESTINATION" Secure="yes">

А><DirectorySearch Id="BASE_DESTINATIONDirectorySearch" Path="CommonAppDataFolder" Depth="0">
А><FileSearch Id="BASE_DESTINATIONFileSearch" ShortName="base.dat" />
А></DirectorySearch>
А></Property>

А><DirectoryRef Id="TARGETDIR">

А><Component Id="base.dat" Guid="{XXX}">
А><Condition>BASE_SOURCE</Condition>
А><CopyFile Id="CopyExternalFile" SourceName="base.dat" SourceProperty="SourceDir" DestinationName="base.dat" DestinationDirectory="CommonAppDataFolder" />
А></Component>

А><Component Id="RemovePerviousFile" Guid="{XXX}">

А><Condition>BASE_DESTINATION AND BASE_SOURCE</Condition>
А><RemoveFile Id="RemovePrevieusFile" Directory="CommonAppDataFolder" Name="base.dat" On="install"/>
А></Component>
А></DirectoryRef>


Спасибо большое. Тут Вы дали взглянуть на проблему с несколько другой стороны мне и кажется помогло. Сдела пока что так:


<Property Id="BASE_SOURCE" Secure="yes">
      <DirectorySearch Id="BASE_SOURCEDirectorySearch" Path="[SOURCEDIR]" Depth="0">
        <FileSearch Id="BASE_SOURCEFileSearch" Name="base.txt" />
      </DirectorySearch>
    </Property>

    <DirectoryRef Id="INSTALLLOCATION">
      <!-- Удаляем файл при uninstall-->
      <Component Id="RemoveDatabaseFileOnUninstall" Guid="{ED9DF15E-58F0-49cd-B916-2FB524F43E81}">
        <Condition>NOT UPGRADINGPRODUCTCODE</Condition>
        <RemoveFile Id="RemoveDatabaseFileOnUninstallDelFile"  Name="base.txt" On="uninstall"></RemoveFile>
      </Component>
      <!-- Удаляем файл при update-->
      <Component Id="RemoveDatabaseFileOnUpdate" Guid="{6BF1952F-A607-4eb6-9605-AFE720E56343}">
        <Condition>BASE_SOURCE</Condition>
        <RemoveFile Id="RemoveDatabaseFileOnUpdateDelFile" Name="base.txt" On="install"/>
      </Component>
      <!-- Устанавливаем файл при его наличии-->
      <Component Id="base.txt" Guid="{B1065BB5-CC40-43a3-B18E-373C725615C2}">
        <Condition>BASE_SOURCE</Condition>
        <CopyFile Id="CopyExternalFile" SourceName="base.txt" SourceProperty="SourceDir" DestinationName="base.txt" DestinationDirectory="INSTALLLOCATION" />
      </Component>
    </DirectoryRef>


предварительные тесты проказали что работает, причем именно так как мне надо....
За исключением 1-го если в инсталяторе выбрать пункт Исправить Установку, то файл бд удаляется )) происходжит это я так понимаю из-за того, что выделено жирным... что там правильно то писать? нужно условие — УДАЛЕНИЕ (не восстановление, не обновление а именно финальное удаление продукта)
--

Автоматизированная справочная система "Сельхозтехника"
Re[14]: Wix, не включать файл в msi или cab
От: -af  
Дата: 31.03.09 11:21
Оценка:
Здравствуйте, Lexa-Lexa, Вы писали:


LL>Спасибо большое. Тут Вы дали взглянуть на проблему с несколько другой стороны мне и кажется помогло. Сдела пока что так:



LL>
LL><Property Id="BASE_SOURCE" Secure="yes">
LL>      <DirectorySearch Id="BASE_SOURCEDirectorySearch" Path="[SOURCEDIR]" Depth="0">
LL>        <FileSearch Id="BASE_SOURCEFileSearch" Name="base.txt" />
LL>      </DirectorySearch>
LL>    </Property>

LL>    <DirectoryRef Id="INSTALLLOCATION">
LL>      <!-- Удаляем файл при uninstall-->
LL>      <Component Id="RemoveDatabaseFileOnUninstall" Guid="{ED9DF15E-58F0-49cd-B916-2FB524F43E81}">
LL>        <Condition>NOT UPGRADINGPRODUCTCODE</Condition>
LL>        <RemoveFile Id="RemoveDatabaseFileOnUninstallDelFile"  Name="base.txt" On="uninstall"></RemoveFile>
LL>      </Component>
LL>      <!-- Удаляем файл при update-->
LL>      <Component Id="RemoveDatabaseFileOnUpdate" Guid="{6BF1952F-A607-4eb6-9605-AFE720E56343}">
LL>        <Condition>BASE_SOURCE</Condition>
LL>        <RemoveFile Id="RemoveDatabaseFileOnUpdateDelFile" Name="base.txt" On="install"/>
LL>      </Component>
LL>      <!-- Устанавливаем файл при его наличии-->
LL>      <Component Id="base.txt" Guid="{B1065BB5-CC40-43a3-B18E-373C725615C2}">
LL>        <Condition>BASE_SOURCE</Condition>
LL>        <CopyFile Id="CopyExternalFile" SourceName="base.txt" SourceProperty="SourceDir" DestinationName="base.txt" DestinationDirectory="INSTALLLOCATION" />
LL>      </Component>
LL>    </DirectoryRef>
LL>


LL>предварительные тесты проказали что работает, причем именно так как мне надо....

LL>За исключением 1-го если в инсталяторе выбрать пункт Исправить Установку, то файл бд удаляется )) происходжит это я так понимаю из-за того, что выделено жирным... что там правильно то писать? нужно условие — УДАЛЕНИЕ (не восстановление, не обновление а именно финальное удаление продукта)

да нужно заменить NOT UPGRADINGPRODUCTCODE на REMOVE=ALL AND NOT UPGRADINGPRODUCTCODE
Re[15]: Wix, не включать файл в msi или cab
От: Lexa-Lexa Россия www.agrobase.ru
Дата: 01.04.09 12:46
Оценка:
LL>>
LL>><Property Id="BASE_SOURCE" Secure="yes">
LL>>      <DirectorySearch Id="BASE_SOURCEDirectorySearch" Path="[SOURCEDIR]" Depth="0">
LL>>        <FileSearch Id="BASE_SOURCEFileSearch" Name="base.txt" />
LL>>      </DirectorySearch>
LL>>    </Property>

LL>>    <DirectoryRef Id="INSTALLLOCATION">
LL>>      <!-- Удаляем файл при uninstall-->
LL>>      <Component Id="RemoveDatabaseFileOnUninstall" Guid="{ED9DF15E-58F0-49cd-B916-2FB524F43E81}">
LL>>        <Condition>NOT UPGRADINGPRODUCTCODE</Condition>
LL>>        <RemoveFile Id="RemoveDatabaseFileOnUninstallDelFile"  Name="base.txt" On="uninstall"></RemoveFile>
LL>>      </Component>
LL>>      <!-- Удаляем файл при update-->
LL>>      <Component Id="RemoveDatabaseFileOnUpdate" Guid="{6BF1952F-A607-4eb6-9605-AFE720E56343}">
LL>>        <Condition>BASE_SOURCE</Condition>
LL>>        <RemoveFile Id="RemoveDatabaseFileOnUpdateDelFile" Name="base.txt" On="install"/>
LL>>      </Component>
LL>>      <!-- Устанавливаем файл при его наличии-->
LL>>      <Component Id="base.txt" Guid="{B1065BB5-CC40-43a3-B18E-373C725615C2}">
LL>>        <Condition>BASE_SOURCE</Condition>
LL>>        <CopyFile Id="CopyExternalFile" SourceName="base.txt" SourceProperty="SourceDir" DestinationName="base.txt" DestinationDirectory="INSTALLLOCATION" />
LL>>      </Component>
LL>>    </DirectoryRef>
LL>>


хм... а при установке удаленной через политики GPO как себя данная конструкцуия будет вести? есть принципиальные отличия? почему то у меня файлик не скопировался... может быть я как то не так политику GPO назначил?
--

Автоматизированная справочная система "Сельхозтехника"
Re[16]: Wix, не включать файл в msi или cab
От: WPooh США  
Дата: 03.04.09 03:19
Оценка:
Здравствуйте, Lexa-Lexa, Вы писали:
LL>хм... а при установке удаленной через политики GPO как себя данная конструкцуия будет вести? есть принципиальные отличия? почему то у меня файлик не скопировался... может быть я как то не так политику GPO назначил?
Мне не охота делать эксперименты, проверьте на своей инсталяшке, будет ли скопирован файл в таком варианте:

msiexec /a installpackagename.msi /l*vx c:\Temp\MyPackage.install.log TARGETDIR=c:\Temp\MyPackage

Проверьте в C:\Temp\MyPackage, есть ли где внутри ваш файлик. Подозреваю, что нету.

Успехов!
К этому моменту у меня внутри 0.5, 0.7, 0.33 (с) НС
Re[17]: Wix, не включать файл в msi или cab
От: Lexa-Lexa Россия www.agrobase.ru
Дата: 03.04.09 07:00
Оценка:
Здравствуйте, WPooh, Вы писали:

WP>Здравствуйте, Lexa-Lexa, Вы писали:

LL>>хм... а при установке удаленной через политики GPO как себя данная конструкцуия будет вести? есть принципиальные отличия? почему то у меня файлик не скопировался... может быть я как то не так политику GPO назначил?
WP>Мне не охота делать эксперименты, проверьте на своей инсталяшке, будет ли скопирован файл в таком варианте:

WP>msiexec /a installpackagename.msi /l*vx c:\Temp\MyPackage.install.log TARGETDIR=c:\Temp\MyPackage


WP>Проверьте в C:\Temp\MyPackage, есть ли где внутри ваш файлик. Подозреваю, что нету.


WP>Успехов!


Да, вы правы, мой файлик даже и не подумал копироваться... может быть дадите комментарии по всему этому, я слабо понимаю
Как же поступить? на всякий случай вот код:


    <!--Common Application Data-->
    <DirectoryRef Id="COMAPPINSTALLDIR">
      <!-- Удаляем файл при uninstall-->
      <Component Id="TaskRemoveDatabaseFileOnUninstall" Guid="{ED9DF15E-58F0-49cd-B916-2FB524F43E81}">
        <Condition>NOT UPGRADINGPRODUCTCODE</Condition>
        <RemoveFile Id="RemoveDatabaseFileOnUninstallDelFile"  Name="$(var.databaseFile)" On="uninstall" />
      </Component>
      <!-- Удаляем файл при update-->
      <Component Id="TaskRemoveDatabaseFileOnUpdate" Guid="{6BF1952F-A607-4eb6-9605-AFE720E56343}">
        <Condition>BASE_SOURCE</Condition>
        <RemoveFile Id="RemoveDatabaseFileOnUpdateDelFile" Name="$(var.databaseFile)" On="install" />
      </Component>
      <!-- Устанавливаем файл при его наличии-->
      <Component Id="TaskCopyBaseFile" Guid="B60F079D-F7EA-4f40-95BC-EF80CDF753B5">
        <Condition>BASE_SOURCE</Condition>
        <CopyFile Id="CopyDatabaseFile" SourceName="$(var.databaseFile)" SourceProperty="SourceDir"
                  DestinationName="$(var.databaseFile)" DestinationDirectory="COMAPPINSTALLDIR" />
      </Component>
      <Component Id="TaskCreateCOMAPPDIR" Guid="{3AD49107-BE67-42c6-B7B9-178700061D4B}">
        <CreateFolder Directory="COMAPPINSTALLDIR">
          <Permission User="[USERGROUP_ADMINISTRATORS]" GenericAll="yes" ChangePermission="yes" />
          <Permission User="[USERGROUP_USERS]" GenericAll="yes" ChangePermission="yes" />
        </CreateFolder>
      </Component>
    </DirectoryRef>
    <!--End of Common Application Data-->

    <!-- Features -->
    <Feature Id="ProductFeature" Title="$(var.ProductName)" Description="$(var.ProductNameVersion)" Level="1">
......
      <ComponentRef Id="TaskCreateCOMAPPDIR" />
      <ComponentRef Id="TaskRemoveDatabaseFileOnUninstall" />
      <ComponentRef Id="TaskRemoveDatabaseFileOnUpdate" />
      <ComponentRef Id="TaskCopyBaseFile" />
.......
    </Feature>
    <!-- End of Features -->
--

Автоматизированная справочная система "Сельхозтехника"
Re[18]: Wix, не включать файл в msi или cab
От: Lexa-Lexa Россия www.agrobase.ru
Дата: 06.04.09 13:17
Оценка:
Жду ответа... если не сложно...
--

Автоматизированная справочная система "Сельхозтехника"
Re[16]: Wix, не включать файл в msi или cab
От: -af  
Дата: 06.04.09 20:38
Оценка:
Здравствуйте, Lexa-Lexa, Вы писали:

LL>хм... а при установке удаленной через политики GPO как себя данная конструкцуия будет вести? есть принципиальные отличия? почему то у меня файлик не скопировался... может быть я как то не так политику GPO назначил?


Принципиально ничего не меняется, но Вы должны обеспечить чтобы при установке нужный файл лежал (не лежал) рядом с msi.
Откуда производиться установка Вы легко узнаете из лога (смотрите на SOURCEDIR, BASE_SOURCEFileSearch, BASE_SOURCE).
По моему при установке через GPO указать командную строку нельзя, так что включить логирование Вы можете так
http://support.microsoft.com/kb/223300
Re[17]: Wix, не включать файл в msi или cab
От: Lexa-Lexa Россия www.agrobase.ru
Дата: 07.04.09 05:25
Оценка:
Здравствуйте, -af, Вы писали:

-af>Здравствуйте, Lexa-Lexa, Вы писали:


LL>>хм... а при установке удаленной через политики GPO как себя данная конструкцуия будет вести? есть принципиальные отличия? почему то у меня файлик не скопировался... может быть я как то не так политику GPO назначил?


-af>Принципиально ничего не меняется, но Вы должны обеспечить чтобы при установке нужный файл лежал (не лежал) рядом с msi.

-af>Откуда производиться установка Вы легко узнаете из лога (смотрите на SOURCEDIR, BASE_SOURCEFileSearch, BASE_SOURCE).
-af>По моему при установке через GPO указать командную строку нельзя, так что включить логирование Вы можете так
-af>http://support.microsoft.com/kb/223300

Да, вы правы, командную строку указать там негде, но вот невзирая на то что файл ЛЕЖИТ рядом с msi он не копируется... буду разбираться
Спасибо за ссылочку...
--

Автоматизированная справочная система "Сельхозтехника"
Re[17]: Wix, не включать файл в msi или cab
От: Lexa-Lexa Россия www.agrobase.ru
Дата: 07.04.09 06:28
Оценка:
Здравствуйте, -af, Вы писали:

-af>Принципиально ничего не меняется, но Вы должны обеспечить чтобы при установке нужный файл лежал (не лежал) рядом с msi.

-af>Откуда производиться установка Вы легко узнаете из лога (смотрите на SOURCEDIR, BASE_SOURCEFileSearch, BASE_SOURCE).
-af>По моему при установке через GPO указать командную строку нельзя, так что включить логирование Вы можете так
-af>http://support.microsoft.com/kb/223300

Посмотрел и логи...
При установке через GPO:
SOURCEDIR — PROPERTY CHANGE: Adding SourceDir property. Its value is '\\Server1\Share\RC5\'. — все верно
BASE_SOURCEFileSearch — вообще ни одного упоминания, ну даже не пытается искать что ли?
BASE_SOURCE — есть только это: SecureCustomProperties = BASE_SOURCE;NETFRAMEWORK20;NEWPRODUCTFOUND;UPGRADEFOUND — какой то бред...

при простой установке имеем:

AppSearch: Свойство: BASE_SOURCE, Подпись: BASE_SOURCEFileSearch
MSI (c) (3C:C0) [10:08:22:356]: Note: 1: 1322 2:  
MSI (c) (3C:C0) [10:08:22:356]: Note: 1: 1322 2:  
MSI (c) (3C:C0) [10:08:22:371]: PROPERTY CHANGE: Adding BASE_SOURCE property. Its value is 'z:\VirtualShare\RC4\agrobase.dat'.

т.е. все верно! ну и для др св-в нормально так же все...

А пути разные потому что в 1м случае это сетевой путь, а во втором у меня другая вирт машина и там уже у меня сетевой диск, дистрибутив же везде одинаковый лежит.
--

Автоматизированная справочная система "Сельхозтехника"
Re[18]: Wix, не включать файл в msi или cab
От: -af  
Дата: 07.04.09 07:01
Оценка:
Здравствуйте, Lexa-Lexa, Вы писали:

LL>Посмотрел и логи...

LL>При установке через GPO:
LL>SOURCEDIR — PROPERTY CHANGE: Adding SourceDir property. Its value is '\\Server1\Share\RC5\'. — все верно
LL>BASE_SOURCEFileSearch — вообще ни одного упоминания, ну даже не пытается искать что ли?
LL>BASE_SOURCE — есть только это: SecureCustomProperties = BASE_SOURCE;NETFRAMEWORK20;NEWPRODUCTFOUND;UPGRADEFOUND — какой то бред...

Насколько мне помниться установка через GPO проходит в silence mode, то есть InstallUISequence не исполняется.
Подозреваю что у Вас не определено действие AppSearch в InstallExecuteSequence.
В любом случае протестировать такое поведение Вы можете задав опцию qn для msiexec
http://msdn.microsoft.com/en-us/library/aa367988.aspx
Re[19]: Wix, не включать файл в msi или cab
От: Lexa-Lexa Россия www.agrobase.ru
Дата: 07.04.09 07:42
Оценка:
Здравствуйте, -af, Вы писали:

-af>Здравствуйте, Lexa-Lexa, Вы писали:


LL>>Посмотрел и логи...

LL>>При установке через GPO:
LL>>SOURCEDIR — PROPERTY CHANGE: Adding SourceDir property. Its value is '\\Server1\Share\RC5\'. — все верно
LL>>BASE_SOURCEFileSearch — вообще ни одного упоминания, ну даже не пытается искать что ли?
LL>>BASE_SOURCE — есть только это: SecureCustomProperties = BASE_SOURCE;NETFRAMEWORK20;NEWPRODUCTFOUND;UPGRADEFOUND — какой то бред...

-af>Насколько мне помниться установка через GPO проходит в silence mode, то есть InstallUISequence не исполняется.


да, тихий режим...

-af>В любом случае протестировать такое поведение Вы можете задав опцию qn для msiexec

-af>http://msdn.microsoft.com/en-us/library/aa367988.aspx

протестил, ну и конечно же вы правы, не работает ничего)))

-af>Подозреваю что у Вас не определено действие AppSearch в InstallExecuteSequence.


позвольте спросить, а почему именно AppSearch? я про него первый раз слышу сейчас инфу почитал, но не вижу в нем ничего, что позволило бы помочь мне...
у меня же цепочка вроде как:
<Feature ......>
<ComponentRef Id="TaskCopyBaseFile" />
.....

затем:
<Component Id="TaskCopyBaseFile" Guid="B60F079D-F7EA-4f40-95BC-EF80CDF753B5">
<Condition>BASE_SOURCE</Condition>
<CopyFile Id="CopyDatabaseFile" SourceName="$(var.databaseFile)" SourceProperty="SourceDir"
DestinationName="$(var.databaseFile)" DestinationDirectory="COMAPPINSTALLDIR" />

а BASE_SOURCE это проперти...
<Property Id="BASE_SOURCE" Secure="yes">

и где цепочка рвется я понять не могу
--

Автоматизированная справочная система "Сельхозтехника"
Re[20]: Wix, не включать файл в msi или cab
От: -af  
Дата: 07.04.09 10:48
Оценка:
Здравствуйте, Lexa-Lexa, Вы писали:

LL>позвольте спросить, а почему именно AppSearch? я про него первый раз слышу сейчас инфу почитал, но не вижу в нем ничего, что позволило бы помочь мне...


http://msdn.microsoft.com/en-us/library/aa367578(VS.85).aspx
The AppSearch action searches for file signatures using the CompLocator table first, the RegLocator table next, then the IniLocator table, and finally the DrLocator table.

Проверьте что AppSearch содержиться в таблице InstallExecuteSequence (используйте Orca для просмотра msi)
Если ее нет то добавьте
<InstallExecuteSequence>
<AppSearch/>
</InstallExecuteSequence>
Re[21]: Wix, не включать файл в msi или cab
От: Lexa-Lexa Россия www.agrobase.ru
Дата: 08.04.09 08:21
Оценка:
Здравствуйте, -af, Вы писали:

-af>http://msdn.microsoft.com/en-us/library/aa367578(VS.85).aspx

-af>The AppSearch action searches for file signatures using the CompLocator table first, the RegLocator table next, then the IniLocator table, and finally the DrLocator table.

-af>Проверьте что AppSearch содержиться в таблице InstallExecuteSequence (используйте Orca для просмотра msi)

-af>Если ее нет то добавьте
-af><InstallExecuteSequence>
-af> <AppSearch/>
-af></InstallExecuteSequence>

AppSearch имеется в табличке InstallExecuteSequence, Sequence=50...
--

Автоматизированная справочная система "Сельхозтехника"
Re[22]: Wix, не включать файл в msi или cab
От: -af  
Дата: 08.04.09 19:08
Оценка:
Здравствуйте, Lexa-Lexa, Вы писали:

LL>Здравствуйте, -af, Вы писали:


-af>>http://msdn.microsoft.com/en-us/library/aa367578(VS.85).aspx

-af>>The AppSearch action searches for file signatures using the CompLocator table first, the RegLocator table next, then the IniLocator table, and finally the DrLocator table.

-af>>Проверьте что AppSearch содержиться в таблице InstallExecuteSequence (используйте Orca для просмотра msi)

-af>>Если ее нет то добавьте
-af>><InstallExecuteSequence>
-af>> <AppSearch/>
-af>></InstallExecuteSequence>

LL>AppSearch имеется в табличке InstallExecuteSequence, Sequence=50...


http://msiworld.blogspot.com/2008/10/using-sourcedir-property-in-package.html

Вам придется использовать OriginalDatabase и откусывать имя msi
http://msdn.microsoft.com/en-us/library/aa370562(VS.85).aspx
(не забудте только что если Вы вызываете reinstall/repair, то OriginalDatabase будет указывать прикешированный msi в папке c:\Windows\installer)
Re[23]: Wix, не включать файл в msi или cab
От: Lexa-Lexa Россия www.agrobase.ru
Дата: 13.04.09 05:48
Оценка:
Здравствуйте, -af, Вы писали:

-af>Вам придется использовать OriginalDatabase и откусывать имя msi

-af>http://msdn.microsoft.com/en-us/library/aa370562(VS.85).aspx
-af>(не забудте только что если Вы вызываете reinstall/repair, то OriginalDatabase будет указывать прикешированный msi в папке c:\Windows\installer)

В общем расскажу чем все закончилось

Для определения наличия базы зядом с инсталятором написал Custom Action на C#...
Использует для определения местоположения он у меня Session["OriginalDatabase"] и извлекает из пути к файлу каталог.
Если база есть устанавливает переменную BASE_SOURCE и дальше уже действует Wix.
--

Автоматизированная справочная система "Сельхозтехника"
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.