仅32/64位WiX组合安装程序-复制文件

时间:2019-10-30 19:12:33

标签: wix windows-installer twincat

我有一个msi,可将文件(PLC代码)复制到目录(C:\ Product \ 3.1 \ Boot),并修改一个密钥。

我的Visual Studio项目为不同的体系结构生成了不同的PLC代码,但是目标在两个平台上都是相同的。他们的钥匙在另一个位置。

我已经看过使用arch-switch和条件语句,但是它们看起来仅是检测编译它的体系结构,而不是运行msi的体系结构。

我知道您不能在同一MSI中使用32/64,但是除了复制文件和更改注册表外,我没有做任何其他事情。我没有在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 :(得分:0)

我能够弄清楚如何使它起作用。通过使用Condition和![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>