Re[5]: WiX обновление продукта без командной строки, как?
От: V.Petrovski Беларусь  
Дата: 27.11.07 14:17
Оценка: 3 (1)
Здравствуйте, пустойчайник, Вы писали:

П>Что все ID разные? Но если ProdictID будет другой, то оно разве не встанет как еще один продукт. У меня так и получается, т.е. в папке, куда я инсталлирую, файлы переписываются, а Add/Remove списке, появляется еще одна программа.

Я когда собираю новую версию, я в командой строке задаю номер версии и ProductID, причем для каждой версии свой ProductID.
Иначе не работает. Я в WiX не селен, но меня мое решение устраивает на 100%, при инстале новой версии, старая удаляется.

П>Может я акцию RemoveExistingProducts не так прописал? Она у меня после InstallFinalize запускается, как в примере.


У меня не так.

<InstallExecuteSequence>
    <FindRelatedProducts Sequence="200" />
    <Custom Action="ERRCA_CANCELNEWERVERSION" Sequence="201">NEWERPRODUCTFOUND AND NOT Installed</Custom>
    <LaunchConditions Sequence="202">NOT Installed</LaunchConditions>
    <ValidateProductID Sequence="700" />
    <Custom Action="DIRCA_TARGETDIR" Sequence="750">TARGETDIR=""</Custom>
    <CostInitialize Sequence="800" />
    <FileCost Sequence="900" />
    <CostFinalize Sequence="1000" />
    <MigrateFeatureStates Sequence="1200" />
    <InstallValidate Sequence="1400" />
    <RemoveExistingProducts Sequence="1402">Not NOUPGRADE</RemoveExistingProducts>
    <InstallInitialize Sequence="1500" />
    <AllocateRegistrySpace Sequence="1550">Not Installed</AllocateRegistrySpace>
    <ProcessComponents Sequence="1600" />
    <UnpublishComponents Sequence="1700" />
    <UnpublishFeatures Sequence="1800" />
    <StopServices Sequence="1900" />
    <DeleteServices Sequence="2000" />
    <RemoveRegistryValues Sequence="2600" />
    <RemoveFiles Sequence="3500" />
    <InstallFiles Sequence="4000" />
    <CreateShortcuts Sequence="4500" />
    <WriteRegistryValues Sequence="5000" />
    <RegisterComPlus Sequence="5700" />
    <InstallServices Sequence="5800" />
    <StartServices Sequence="5900" />
    <RegisterUser Sequence="6000" />
    <RegisterProduct Sequence="6100" />
    <PublishComponents Sequence="6200" />
    <PublishFeatures Sequence="6300" />
    <PublishProduct Sequence="6400" />
    <InstallFinalize Sequence="6700" />
</InstallExecuteSequence>


SafeDevelop
WiX обновление продукта без командной строки, как?
От: пустойчайник  
Дата: 23.11.07 10:21
Оценка:
Использую для установки программы msi сделанный WiX. Хочу сделать среднее обновление, т.е. меняю GUID пакета и номер версии в свойстве Product Version. При запуске нового msi пакета система ругается, что такая программа уже установлена, и её следует деинсталлировать. В документации предлагают запускать msi пакет с ключами. Можно ли как-то обойти эту проблему, т.е. запускать msi без ключей, но что бы он устанавливался? Если нельзя, то можно ли как-то из msi деинсталлировать старую версию и поставить новую?
Re: WiX обновление продукта без командной строки, как?
От: V.Petrovski Беларусь  
Дата: 23.11.07 11:38
Оценка:
Здравствуйте, пустойчайник, Вы писали:

П>Использую для установки программы msi сделанный WiX. Хочу сделать среднее обновление, т.е. меняю GUID пакета и номер версии в свойстве Product Version. При запуске нового msi пакета система ругается, что такая программа уже установлена, и её следует деинсталлировать. В документации предлагают запускать msi пакет с ключами. Можно ли как-то обойти эту проблему, т.е. запускать msi без ключей, но что бы он устанавливался? Если нельзя, то можно ли как-то из msi деинсталлировать старую версию и поставить новую?


Я докомпилировал несколлько готовых msi с таким функционалом, и получил рабочее решение.
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
    <Product 
                Id="$(var.PRODUCTID)" 
                Language="1033" 
                Name="Product $(var.PRODUCTVERSION)" 
                UpgradeCode="{829BE326-BAD6-4978-ADA7-0A5EBE82B2BC}" 
                Version="$(var.PRODUCTVERSION)">

        <Package 
                SummaryCodepage="1251" 
                Languages="1033" 
                Platforms="Intel" 
                ReadOnly="no" 
                Compressed="yes" 
                InstallerVersion="200" 
                />
        
        <Binary Id="WixUI_Bmp_Banner" SourceFile="SourceDir\Binary\WixUI_Bmp_Banner.bmp" />
        <Binary Id="WixUI_Bmp_Dialog" SourceFile="SourceDir\Binary\WixUI_Bmp_Dialog.bmp" />
        <Binary Id="WixUI_Ico_Exclam" SourceFile="SourceDir\Binary\WixUI_Ico_Exclam.bmp" />
        <Binary Id="WixUI_Ico_Info" SourceFile="SourceDir\Binary\WixUI_Ico_Info.bmp" />
        <Binary Id="WixUI_Bmp_New" SourceFile="SourceDir\Binary\WixUI_Bmp_New.bmp" />
        <Binary Id="WixUI_Bmp_Up" SourceFile="SourceDir\Binary\WixUI_Bmp_Up.bmp" />
        
        <Property Id="DiskPrompt" Value="[ProductName] installation package, [1]." />
        <Property Id="WixUIRMOption" Value="UseRM" />
        <Property Id="WIXUI_INSTALLDIR" Value="TARGETDIR" Secure="yes" />
        <Property Id="ALLUSERS" Value="2" Secure="yes" />
        <Property Id="FOLDERFORM_ALLUSERS" Value="ALL" Secure="yes" />
        <Property Id="DISABLEADVTSHORTCUTS" Value="1" Secure="yes" />
        <Property Id="DefaultUIFont" Value="WixUI_Font_Normal" />
        <Property Id="ErrorDialog" Value="ErrorDlg" />
        <Property Id="NOUPGRADE" Secure="yes" />
        <Property Id="CANNOTUPGRADENEWER" Secure="yes" />
        <Property Id="CANNOTUPGRADESAME" Secure="yes" />
        <Property Id="EXISTINGPRODUCTS" Secure="yes" />
        <Property Id="INSTALLDIR" Secure="yes" />
        <Property Id="PREVIOUSVERSIONSINSTALLED" Secure="yes" />

        <Condition Message="An administrator must approve or install [ProductName].">Privileged</Condition>
        <Condition Message="[ProductName] can only be installed on Windows 2000 or a more recent version">VersionNT &gt;= 500</Condition>
        <Condition Message="Setup has detected that the same version of [ProductName] is already installed on your system. The installer can only upgrade from older versions. You should manually uninstall the conflicting product and then run the installation again.">NOT CANNOTUPGRADESAME OR Installed OR NOUPGRADE</Condition>
        <Condition Message="Setup has detected that a newer version of [ProductName] is already installed on your system. The installer can only upgrade from older versions. You should manually uninstall the conflicting product and then run the installation again.">NOT CANNOTUPGRADENEWER OR Installed OR NOUPGRADE</Condition>

        <Upgrade Id="{829BE326-BAD6-4978-ADA7-0A5EBE82B2BC}">
                <UpgradeVersion Minimum="$(var.PRODUCTVERSION)" Maximum="$(var.PRODUCTVERSION)" Property="CANNOTUPGRADESAME" OnlyDetect="yes" IncludeMinimum="yes" IncludeMaximum="yes" />
                <UpgradeVersion Minimum="$(var.PRODUCTVERSION)" Maximum="127.0.0" Property="CANNOTUPGRADENEWER" OnlyDetect="yes" IncludeMaximum="yes" />
                <UpgradeVersion Minimum="0.0.0" Maximum="$(var.PRODUCTVERSION)" Property="EXISTINGPRODUCTS" MigrateFeatures="yes" IncludeMinimum="yes" />
        </Upgrade>

        <CustomAction Id="ERRCA_CANCELNEWERVERSION" Error="Unable to install because a newer version of this product is already installed." />

        ....

    </Product>
</Wix>


Safe Develop
Re[2]: WiX обновление продукта без командной строки, как?
От: пустойчайник  
Дата: 27.11.07 11:47
Оценка:
Видимо я всё-таки, что-то не понимаю. Свойство EXISTINGPRODUCTS ставится, если продукт уже есть в системе этой строкой:

  ...
  <UpgradeVersion Minimum="0.0.0" Maximum="$(var.PRODUCTVERSION)" Property="EXISTINGPRODUCTS" MigrateFeatures="yes" IncludeMinimum="yes" />
 </Upgrade>


MigrateFeatures="yes" должна запустить переустановку? Не запускается.
Пробовал вообще весь кусок кода, тоже самое "Установленна другая версия этого продукта ..." и все. Upgrade Id у меня совпадает с UpgradeCode продукта и один и тот же для всех версий программы.
Re[3]: WiX обновление продукта без командной строки, как?
От: V.Petrovski Беларусь  
Дата: 27.11.07 13:24
Оценка:
Здравствуйте, пустойчайник, Вы писали:

П>MigrateFeatures="yes" должна запустить переустановку? Не запускается.

П>Пробовал вообще весь кусок кода, тоже самое "Установленна другая версия этого продукта ..." и все. Upgrade Id у меня совпадает с UpgradeCode продукта и один и тот же для всех версий программы.
А ProdictID у тебя тоже совпадает? Они должны быть разными в разных версиях.


SafeDevelop
Re[4]: WiX обновление продукта без командной строки, как?
От: пустойчайник  
Дата: 27.11.07 14:10
Оценка:
Здравствуйте, V.Petrovski, Вы писали:

VP>А ProdictID у тебя тоже совпадает? Они должны быть разными в разных версиях.


Что все ID разные? Но если ProdictID будет другой, то оно разве не встанет как еще один продукт. У меня так и получается, т.е. в папке, куда я инсталлирую, файлы переписываются, а Add/Remove списке, появляется еще одна программа. Может я акцию RemoveExistingProducts не так прописал? Она у меня после InstallFinalize запускается, как в примере.
Re[6]: WiX обновление продукта без командной строки, как?
От: пустойчайник  
Дата: 28.11.07 11:10
Оценка:
Спасибо, наконец-то разобрался, заработало!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.