32/64 бит WiX Combined Installer-копирование только файлов - PullRequest
0 голосов
/ 30 октября 2019

У меня есть MSI, которая копирует файлы (код PLC) в каталог (C: \ Product \ 3.1 \ Boot) и изменяет один ключ.

Мой проект Visual Studio генерирует разные коды PLC для разныхархитектуры, но назначение на обеих платформах одинаковое. Они находятся в другом месте.

Я смотрел на использование переключателя арки и условных операторов, но они смотрят только на обнаружение архитектуры, на которой он скомпилирован, а не на то, где запускается msi.

Я знаю, что у вас не может быть 32/64 в том же MSI, но я не делаю ничего, кроме копирования файлов и изменения реестров. Я ничего не помещаю в каталоги / программные файлы Windows.

Хотелось бы, чтобы оно появилось с версией в списке программ.

Возможно ли в этом случае иметь один установщик?

Код '' '

<Product Id="*" 
         Name="Company" 
         Language="1033" 
         Version="4.09" 
         Manufacturer="CompanyInc." 
         UpgradeCode="YOUR_GUID"
         >
    <Package Id ="*" 
             InstallerVersion="200" 
             InstallPrivileges="elevated"
             Compressed="yes" 
             InstallScope="perMachine"
             Description="Company PLC Code"
             Manufacturer="CompanyInc."
             Keywords="PLC"
             Comments="F"
             />

    <!--Upgrade/install control-->
    <MajorUpgrade 
                  AllowDowngrades="yes"
                  />

    <!--GUI for install display-->



    <UI>
        <UIRef Id="WixUI_Minimal" />    <!--Define type of UI -->
    </UI>


    <Upgrade Id="GUID_HERE">
        <UpgradeVersion OnlyDetect="no" 
                        Property="SELFFOUND"
                        Minimum="1.0"
                        />
    </Upgrade>


    <MediaTemplate EmbedCab="yes" />

    <!-- Set the icon used in the programs and features list-->
    <Icon Id='ProductIcon' SourceFile='Company.ico' />
    <Property Id='ARPPRODUCTICON' Value='ProductIcon' />


    <!-- Things to install-->
    <Feature Id="Default" Title="PLC Code" Level="1">
        <ComponentGroupRef Id="ProductComponentsx64" />
    </Feature>

    <Directory Id="TARGETDIR" Name="SourceDir">
        <Directory Id="ProgramFilesFolder">
            <Directory Id="INSTALLFOLDER" Name="Company PLC" />
            <Directory Id="BOOTDIR" />
                <Directory Id="PLCDIR" />
        </Directory>

    </Directory>

    <SetDirectory Id="BOOTDIR" Value="C:\CompanySoftware\3.1\Boot" />
    <SetDirectory Id="PLCDIR" Value="C:\CompanySoftware\3.1\Boot\Plc" />


    <!--Specify when actions occur actions during install-->
    <InstallExecuteSequence>
        <Custom Action="ARCHIVEBOOTDIR" After ="CostFinalize"  />
        <!--ToDo: copy files-->
    </InstallExecuteSequence>
</Product>




<Fragment>
    <!--64 bit systems: Place files in appropriate directories and modify registry key for Company to autostart -->
    <ComponentGroup Id="ProductComponentsx64">
        <Component Id="BootComponents" Guid="" Directory="BOOTDIR">
            <File Id="CurrentConfig.xml" Source="..\_Boot\CompanySoftware RT (x64)\CurrentConfig.xml" KeyPath="no" />
        </Component>
        <Component Id="PLCComponent" Guid="" Directory="PLCDIR">
            <File Id="Port_851.app" Source="..\_Boot\CompanySoftware RT (x64)\Plc\Port_851.app" KeyPath="no" />
            <File Id="Port_851.autostart" Source="..\_Boot\CompanySoftware RT (x64)\Plc\Port_851.autostart" KeyPath="no" />
            <File Id="Port_851.cid" Source="..\_Boot\CompanySoftware RT (x64)\Plc\Port_851.cid" KeyPath="no" />
            <File Id="Port_851.crc" Source="..\_Boot\CompanySoftware RT (x64)\Plc\Port_851.crc" KeyPath="no" />
            <File Id="Port_851.occ" Source="..\_Boot\CompanySoftware RT (x64)\Plc\Port_851.occ" KeyPath="no" />
            <File Id="Port_851.ocm" Source="..\_Boot\CompanySoftware RT (x64)\Plc\Port_851.ocm" KeyPath="no" />
            <File Id="Port_851_boot.tizip" Source="..\_Boot\CompanySoftware RT (x64)\Plc\Port_851_boot.tizip" KeyPath="no" />
        </Component>
        <Component Id="StartupReg" Guid="" Directory="TARGETDIR">
            <RegistryKey Root="HKLM"
                         Key="Software\WOW6432Node\Company\CompanySoftware3\System">
                <RegistryValue Name="SysStartupState"
                               Type="integer"
                               Value ="5"/>
            </RegistryKey>
        </Component>
    </ComponentGroup>
</Fragment>


<Fragment>
    <!--32 bit systems: Place files in appropriate directories and modify registry key for Company to autostart -->
    <ComponentGroup Id="ProductComponentsx86">
        <Component Id="BootComponents" Guid="" Directory="BOOTDIR">
            <File Id="CurrentConfig.xml" Source="..\_Boot\CompanySoftware RT (x86)\CurrentConfig.xml" KeyPath="no" />
            <File Id="Company.ico" Source="Company.ico" KeyPath="no" />
        </Component>
        <Component Id="PLCComponent" Guid="" Directory="PLCDIR">
            <File Id="Port_851.app" Source="..\_Boot\CompanySoftware RT (x86)\Plc\Port_851.app" KeyPath="no" />
            <File Id="Port_851.autostart" Source="..\_Boot\CompanySoftware RT (x86)\Plc\Port_851.autostart" KeyPath="no" />
            <File Id="Port_851.cid" Source="..\_Boot\CompanySoftware RT (x86)\Plc\Port_851.cid" KeyPath="no" />
            <File Id="Port_851.crc" Source="..\_Boot\CompanySoftware RT (x86)\Plc\Port_851.crc" KeyPath="no" />
            <File Id="Port_851.occ" Source="..\_Boot\CompanySoftware RT (x86)\Plc\Port_851.occ" KeyPath="no" />
            <File Id="Port_851.ocm" Source="..\_Boot\CompanySoftware RT (x86)\Plc\Port_851.ocm" KeyPath="no" />
            <File Id="Port_851_boot.tizip" Source="..\_Boot\CompanySoftware RT (x86)\Plc\Port_851_boot.tizip" KeyPath="no" />
        </Component>
        <Component Id="StartupReg" Guid="" Directory="TARGETDIR">
            <RegistryKey Root="HKLM"
                         Key="Software\Company\CompanySoftware3\System">
                <RegistryValue Name="SysStartupState"
                               Type="integer"
                               Value ="5"/>
            </RegistryKey>
        </Component>
    </ComponentGroup>
</Fragment>

' ''

1 Ответ

0 голосов
/ 15 ноября 2019

Я смог понять, как заставить это работать. Используя Условие и! [CDATA [NOT (VersionNT64)]] для определения версии, я смог выполнить различные действия!

<Product Id="*"
         Name="Company PLC"
         Language="1033"
         Version="4.09"
         Manufacturer="Company Inc."
         UpgradeCode="Code"
         >
    <Package Id ="*"
             InstallerVersion="200"
             InstallPrivileges="elevated"
             Compressed="yes"
             InstallScope="perMachine"
             Description="Company CompanySoftware PLC Code"
             Manufacturer="Company Inc."
             Keywords="PLC"
             Comments="Company "
             />

    <!--Upgrade/install control-->
    <MajorUpgrade
                  AllowDowngrades="yes"
                  />

    <!--GUI for install display-->

    <!-- future use for custom graphics on the MSI pages
    <WixVariable Id="WixUIBannerBmp" Value="CompanyWixUIBanner.bmp" />
    <WixVariable Id="WixUIDialogBmp" Value="CompanyWixUIBanner.bmp" />
    -->

    <UI>
        <UIRef Id="WixUI_Minimal" />
        <!--Define type of UI -->
    </UI>


    <Upgrade Id="CODE">
        <UpgradeVersion OnlyDetect="no"
                        Property="SELFFOUND"
                        Minimum="1.0"
                        />
    </Upgrade>


    <MediaTemplate EmbedCab="yes" />

    <!-- Set the icon used in the Windows programs and features list-->
    <Icon Id='ProductIcon' SourceFile='Company.ico' />
    <Property Id='ARPPRODUCTICON' Value='ProductIcon' />


    <!-- Things to install- This would normally appear as the selectable list of items to install in a regular installer-->
    <Feature Id="Default_x64" Title="PLC Code x64" Level="1">
        <Condition Level ="1">
            <![CDATA[(VersionNT64)]]>
        </Condition>
            <ComponentGroupRef Id="ProductComponentsx64" />
    </Feature>

    <Feature Id="Default_x86" Title="PLC Code x86" Level="1">
        <Condition Level ="1">
            <![CDATA[NOT(VersionNT64)]]>
        </Condition>
        <ComponentGroupRef Id="ProductComponentsx86" />
    </Feature>


    <Directory Id="TARGETDIR" Name="SourceDir">
        <Directory Id="ProgramFilesFolder">
            <Directory Id="INSTALLFOLDER" Name="Company PLC" />
            <Directory Id="BOOTDIR" />
            <Directory Id="PLCDIR" />
        </Directory>

    </Directory>

    <SetDirectory Id="BOOTDIR" Value="C:\CompanySoftware\3.1\Boot" />
    <SetDirectory Id="PLCDIR" Value="C:\CompanySoftware\3.1\Boot\Plc" />


</Product>




<Fragment>
    <!--64 bit systems: Place files in appropriate directories and modify registry key for Company to autostart -->
    <ComponentGroup Id="ProductComponentsx64">
        <Component Id="BootComponentsx64" Guid="" Directory="BOOTDIR">
            <Condition>
                <![CDATA[(VersionNT64)]]>
            </Condition>
            <File Id="CurrentConfig.xml.x64" Source="..\_Boot\CompanySoftware RT (x64)\CurrentConfig.xml" KeyPath="no" />
        </Component>
        <Component Id="PLCComponent.x64" Guid="" Directory="PLCDIR">
            <Condition>
                <![CDATA[(VersionNT64)]]>
            </Condition>
            <File Id="Port_851.app.x64" Source="..\_Boot\CompanySoftware RT (x64)\Plc\Port_851.app" KeyPath="no" />
        </Component>
        <Component Id="StartupReg.x64" Guid="" Directory="TARGETDIR">
            <Condition>
                <![CDATA[(VersionNT64)]]>
            </Condition>
            <RegistryKey Root="HKLM"
                         Key="Software\WOW6432Node\Company\CompanySoftware\System">
                <RegistryValue Name="SysStartupState"
                               Type="integer"
                               Value ="5"/>
            </RegistryKey>
        </Component>
    </ComponentGroup>
</Fragment>


<Fragment>
    <!--32 bit systems: Place files in appropriate directories and modify registry key for Company to autostart -->
    <ComponentGroup Id="ProductComponentsx86">
        <Component Id="BootComponentsx86" Guid="" Directory="BOOTDIR">
            <Condition>
                <![CDATA[NOT(VersionNT64)]]>
            </Condition>
            <File Id="CurrentConfig.xml.x86" Source="..\_Boot\CompanySoftware RT (x86)\CurrentConfig.xml" KeyPath="no" />
        </Component>
        <Component Id="PLCComponentx86" Guid="" Directory="PLCDIR">
            <Condition>
                <![CDATA[NOT(VersionNT64)]]>
            </Condition>
            <File Id="Port_851.app.x86" Source="..\_Boot\CompanySoftware RT (x86)\Plc\Port_851.app" KeyPath="no" />
        </Component>
        <Component Id="StartupReg.x86" Guid="" Directory="TARGETDIR">
            <Condition>
                <![CDATA[NOT(VersionNT64)]]>
            </Condition>
            <RegistryKey Root="HKLM"
                         Key="Software\Company\CompanySoftware\System">
                <RegistryValue Name="SysStartupState"
                               Type="integer"
                               Value ="5"/>
            </RegistryKey>
        </Component>
    </ComponentGroup>
</Fragment>

...