Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.145.156.46] |
|
Страницы: (2) [1] 2 все ( Перейти к последнему сообщению ) |
Сообщ.
#1
,
|
|
|
Поясните, пожалуйста: если мне нужно выпускать обновления для программы и необходимо, чтобы 2, 3 и т.д. версии этой программы можно было устанавливать без наличия на компьютере предыдущих версий, то мне нужно использовать major upgrade? Minor не подойдет?
И еще: как реализовать такую проверку, если установлена 1 версия программы, то мы выполняем одно действие, а если установлена 3 версия программы, то выполняем совсем другое. Помогите, пожалуйста |
Сообщ.
#2
,
|
|
|
Цитата Tatyana Druzenko @ И еще: как реализовать такую проверку, если установлена 1 версия программы, то мы выполняем одно действие, а если установлена 3 версия программы, то выполняем совсем другое. ну как вариант занеси онфрмацию о версии в реестр, при запуске программы проверяй ее, если то то делай то, если это то делай это |
Сообщ.
#3
,
|
|
|
А можно, пожалуйста, пример кода:
как какую-то переменную (в данном случае версию установленной на компьютере программы) занести в реестр |
Сообщ.
#4
,
|
|
|
Установка major upgrade'а отличается от установки minor upgrade'а командной строкой В случае minor upgrade'а нужно использовать проперти REINSTALL и REINSTALLMODE.
minor upgrade - это такой обрезанный major upgrade Цитата A minor upgrade can be used to add new features and components but cannot reorganize the feature-component tree. Я еще не видел ни одной ситуации, когда было бы необходимо использовать minor upgrade Цитата Tatyana Druzenko @ как реализовать такую проверку, если установлена 1 версия программы, то мы выполняем одно действие, а если установлена 3 версия программы, то выполняем совсем другое. Используя Upgrade Table и FindRelatedProducts Action ты можешь устанавливать проперти в зависимости от того, какой продукт у тебя установлен. Ну а дальше можешь делать все, что тебе надо Либо менять InstallLevel, либо Feature level, либо использовать как условие для кастом экшенов или для компонент. Короче говоря все в твоих руках Besha, все уже давно внесено в реестр, на надо туда писать ничего лишнего |
Сообщ.
#5
,
|
|
|
Везде пишут про элемент MajorUpgrade, который все делает автоматически. Получается, что можно не прописывать Upgrade, InstallExecuteSequence, Property? Или в моем случае нельзя использовать такой простой способ обновления:
<MajorUpgrade DowngradeErrorMessage="A newer version of [ProductName] is already installed." Schedule="afterInstallInitialize" /> ? Помогите, пожалуйста примером, потому что я уже запуталась в разных мнениях и решениях, а в книге ничего толком не написано. |
Сообщ.
#6
,
|
|
|
Цитата Tatyana Druzenko @ Получается, что можно не прописывать Upgrade, InstallExecuteSequence, Property? для MajorUpgrade да но тебе же еще надо определить какая именно версия была установлена, поэтому без Property не обойтись <Property Id="PRODUCT_1"> <ProductSearch Minimum="1.0.0" Maximum="1.0.50" UpgradeCode="GUID" /> </Property> <Property Id="PRODUCT_2"> <ProductSearch Minimum="1.0.60" Maximum="1.0.150" UpgradeCode="GUID" /> </Property> |
Сообщ.
#7
,
|
|
|
Спасибо большое за помощь.
Получается, мне только нужно 1. объявить эти свойства так, как Вы написали. 2. Потом присвоить им номер версии программы, которая в данный момент установлена на компьютере (так? <SetProperty Id="PROD_1" Value="[ProductCode]" After="AppSearch">(PRODUCT_1)</SetProperty>). ProductCode - переменная, объявленная в файле. 3. Как потом использовать эти свойства? Где прописывать действия, которые мне нужно сделать, если на компьютере обнаружилась 2-я версия продукта? 4. Нужно ли вообще вот это: <UpgradeVersion OnlyDetect="no" Minimum="1.0.0.0" IncludeMinimum="yes" Maximum="99.99.99.0" IncludeMaximum="no" Property="PRODUCT_1"/> |
Сообщ.
#8
,
|
|
|
Tatyana Druzenko, мне кажется, что сначала было бы неплохо сформулировать задание А уже после этого будем думать, как это задание решить По пунктам.
Цитата Tatyana Druzenko @ 1. объявить эти свойства так, как Вы написали. да Цитата Tatyana Druzenko @ 2. Потом присвоить им номер версии программы, которая в данный момент установлена на компьютере нет. ничего присваивать не надо, все будет присвоено автоматически Цитата Tatyana Druzenko @ 3. Как потом использовать эти свойства? так же, как и все другие проперти - в качестве кондишенов или в качестве переменных. не знаю, что тебе нужно Цитата Tatyana Druzenko @ Где прописывать действия, которые мне нужно сделать, если на компьютере обнаружилась 2-я версия продукта? А что тебе надо делать, если обнаружилась 2-ая версия продукта? И чем эти действия отличаются от случая, если обнаруживается 1-ая версия продукта? Цитата Tatyana Druzenko @ 4. Нужно ли вообще вот это можно и так. собственно говоря - это, насколько я понимаю, эквивалент элементу MajorUpgrade (разница в том, что если ты используешь MajorUpgrade, то проперти с именем WIX_UPGRADE_DETECTED, а если UpgradeVersion, то можешь задавать имя сама). |
Сообщ.
#9
,
|
|
|
А какую литературу Вы изучали? Я читала книгу Евгения Воднева, но там про обновления совершенно непонятно
Задание вот какое: 1. Я уже написала инсталятор для программы. 2. Теперь еще нужно сделать так, что когда выпустится 2 версия для этой программы, запустят установочник, он определит, что стоит 1 версия и не заменит конфиг-файл программы. 3. А вот когда выпустится 3 версия и ее будут устанавливать на компьютеры, то конфиг файл должен измениться (независимо от того 1 версия стояла или уже 2-ая). 4. Когда выпустится 4 версия, то (ВОТ ТУТ Непонятно ) 1.если стояла 1 или 2 версия, то конфиг-файл меняется 2.если обнаружена 3 версия, то конфиг-файл не меняется При всем при этом! Необходимо, чтобы каждая новая версия программы могла бы быть установлена без наличия на компьютере какой-либо предыдущей версии (то есть просто взять и установить на комп сразу 4 версию - и все должно работать) Я правильно понимаю, что нужно для каждой версии программы писать свой инсталлятор в WIX (то есть создавать отдельный проект в Visual Studio)? |
Сообщ.
#10
,
|
|
|
Цитата Tatyana Druzenko @ А какую литературу Вы изучали? Windows Installer 3.1 - Architektur, Troubleshooting und Patchmanagement, но тебе это врядли пригодится Ну и MSDN - там все есть Цитата Tatyana Druzenko @ 2. Теперь еще нужно сделать так, что когда выпустится 2 версия для этой программы, запустят установочник, он определит, что стоит 1 версия и не заменит конфиг-файл программы. 3. А вот когда выпустится 3 версия и ее будут устанавливать на компьютеры, то конфиг файл должен измениться (независимо от того 1 версия стояла или уже 2-ая). 4. Когда выпустится 4 версия, то (ВОТ ТУТ Непонятно ) 1.если стояла 1 или 2 версия, то конфиг-файл меняется 2.если обнаружена 3 версия, то конфиг-файл не меняется Мда, ну и изврат Т.е. если пользователь внес какие-то свои изменения, то их просто грохнуть и закатать новый конфиг Красота Короче Для 1-ой версии 1 ничего делать не надо Для 2-й версии: <Property Id="PRODUCT_V1_INSTALLED"> <ProductSearch Minimum="1.0.0" IncludeMinimum="yes" Maximum="2.0.0" IncludeMaximum="no" UpgradeCode="твой UpgradeCode" /> </Property> <Component Id="MyApplicationConfig" Guid="{71904D65-2684-4AB2-BFF5-E2DCB2DBEB52}"> <File Id="MyConfigFile" Source="SomeSource\config.cfg" /> <Condition><![CDATA[NOT PRODUCT_V1_INSTALLED]]></Condition> </Component> В 3-й версии сделаешь так: <Property Id="PRODUCT_V1ORV2_INSTALLED"> <ProductSearch Minimum="1.0.0" IncludeMinimum="yes" Maximum="3.0.0" IncludeMaximum="no" UpgradeCode="твой UpgradeCode" /> </Property> <Component Id="MyApplicationConfig" Guid="{71904D65-2684-4AB2-BFF5-E2DCB2DBEB52}"> <File Id="MyConfigFile" Source="SomeSource\config.cfg" /> <Condition><![CDATA[PRODUCT_V1ORV2_INSTALLED]]></Condition> </Component> По идее должно работать Добавлено Цитата Tatyana Druzenko @ Я правильно понимаю, что нужно для каждой версии программы писать свой инсталлятор в WIX (то есть создавать отдельный проект в Visual Studio)? Нет, достаточно сохранять исходник в системе контроля версий. |
Сообщ.
#11
,
|
|
|
Спасибо большое за помощь, сейчас буду пробовать
|
Сообщ.
#12
,
|
|
|
До сих пор не могу понять, как организовать вот этот пункт:
4. Когда выпустится 4 версия, то (ВОТ ТУТ Непонятно) 1.если стояла 1 или 2 версия, то конфиг-файл меняется 2.если обнаружена 3 версия, то конфиг-файл не меняется Писала вот так - выдает ошибку (The Component element contains multiple Condition child elements. There can only be one Condition child element per Component element): <Component Id="SchedulerService.exe.config" Guid="7FAA0D24-FA90-4DF1-8B94-83F257EDB7B3"> <File Source="C:\Program Files (x86)\OpenSoft\InkRouter\SchedulerService\SchedulerService.exe.config" Name="SchedulerService.exe.config"/> <Condition><![CDATA[NOT PRODUCT_V3_INSTALLED]]></Condition> <File Source="SchedulerService.exe.config" Name="SchedulerService.exe.config"/> <Condition><![CDATA[NOT PRODUCT_V1ORV2_INSTALLED]]></Condition> </Component> Помогите, пожалуйста, выполнить этот пункт. |
Сообщ.
#13
,
|
|
|
Fester
еще один вопросик появился: а что Вы подразумевали под этой строчкой? <File Id="MyConfigFile" Source="SomeSource\config.cfg" /> Конкретно: что должно быть написано в Source? |
Сообщ.
#14
,
|
|
|
Цитата Tatyana Druzenko @ Писала вот так - выдает ошибку (The Component element contains multiple Condition child elements. There can only be one Condition child element per Component element): Ну все правильно У компоненты может быть только одно условие. У в твоем варианте у компоненты <Component Id="SchedulerService.exe.config" Guid="7FAA0D24-FA90-4DF1-8B94-83F257EDB7B3"> два условия: <Condition><![CDATA[NOT PRODUCT_V3_INSTALLED]]></Condition> и <Condition><![CDATA[NOT PRODUCT_V1ORV2_INSTALLED]]></Condition> Для 4-й версии файл не надо устанавливать только в том случае, если была найдена 3-ая версия, во всех остальных случаях надо устанавливать. Т.е. <Condition><![CDATA[NOT PRODUCT_V3_INSTALLED]]></Condition> Цитата Tatyana Druzenko @ Конкретно: что должно быть написано в Source? Source - это файл, который берется во время сборки MSI. |
Сообщ.
#15
,
|
|
|
Спасибо
Добавлено Условие не срабатывает Написала вот так <Property Id="PRODUCT_V3_INSTALLED"> <ProductSearch Minimum="3.0.0" IncludeMinimum="yes" Maximum="4.0.0" IncludeMaximum="no" UpgradeCode="$(var.UpgradeCode)" /> </Property> <Component Id="SchedulerService.exe.config" Guid="7FAA0D24-FA90-4DF1-8B94-83F257EDB7B3"> <Condition><![CDATA[NOT Installed OR NOT PRODUCT_V3_INSTALLED]]></Condition> <File Id="SchedulerService.exe.config" Source="$(var.OpenSoft.InkRouter.SchedulerService.TargetDir)SchedulerService.exe.config" Name="SchedulerService.exe.config"/> </Component> Но данный файл не обновляется |