Идентификация платформы в WiX 3.0

Кажется, что никто ничего еще не сказал в поддержку несуррогата (я смущаюсь говорить "естественный"), ключи. Таким образом, здесь идет...

А недостаток из суррогатных ключей - то, что они бессмысленны (процитированный в качестве преимущества некоторыми, но...). Это иногда вынуждает Вас присоединиться к намного большему количеству таблиц в свой запрос, чем должно действительно быть необходимым. Сравните:

select sum(t.hours)
from timesheets t
where t.dept_code = 'HR'
and t.status = 'VALID'
and t.project_code = 'MYPROJECT'
and t.task = 'BUILD';

против:

select sum(t.hours)
from timesheets t
     join departents d on d.dept_id = t.dept_id
     join timesheet_statuses s on s.status_id = t.status_id
     join projects p on p.project_id = t.project_id
     join tasks k on k.task_id = t.task_id
where d.dept_code = 'HR'
and s.status = 'VALID'
and p.project_code = 'MYPROJECT'
and k.task_code = 'BUILD';

, Если кто-либо серьезно не думает, следующее является хорошей идеей?:

select sum(t.hours)
from timesheets t
where t.dept_id = 34394
and t.status_id = 89    
and t.project_id = 1253
and t.task_id = 77;

, "Но" кто-то скажет, "что происходит, когда код для MYPROJECT или ДОПУСТИМЫЙ или HR изменяется?" К которому мой ответ был бы: "почему был бы Вы потребность для изменения его?" Это не "естественные" ключи в том смысле, что некоторое внешнее тело собирается издать законы, это впредь 'ДОПУСТИМОЕ' должно быть повторно кодировано как 'ХОРОШЕЕ'. Только небольшой процент "естественных" ключей действительно попадает в ту категорию - SSN и почтовый индекс, являющийся обычными примерами. Я определенно использовал бы бессмысленный числовой ключ для таблиц как Человек, Адрес - но не для [1 113] все , который по некоторым причинам большинство людей здесь, кажется, защищает.

См. также: мой ответ на другой вопрос

11
задан Peter Mortensen 29 December 2016 в 15:51
поделиться

2 ответа

Я не Я не верю, что вы сможете иметь один MSI, который будет поддерживать обе платформы. Вам нужно будет создать один для x86, а другой x64 - хорошая новость в том, что вам не нужно поддерживать еще один проект WiX для достижения этой цели.

Раньше я делал это следующим образом: начало определения вашего продукта.

<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">

    <?if $(var.Platform)=x64 ?>
      <?define msiProductId = "102F7DF4-19A6-4d3d-987F-FF57A2031593" ?>
      <?define win64Flag = "yes" ?>
    <?else ?>
      <?define msiProductId = "8AE46CAF-220F-4B9F-9527-D4A19A27C45B" ?>
      <?define win64Flag = "no" ?>
    <?endif ?>

    <Product Id="$(var.msiProductId)"
             Name="My Product"
             Language="1033"
             Version="1.0.0"
             Manufacturer="Acme"
             UpgradeCode="E2575E4A-A62E-4460-B96D-B722C79C8EAA">

        <Package InstallerVersion="400"
                 Compressed="yes"
                 InstallPrivileges="elevated"
                 Platform="$(var.Platform)"
        />

        <!-- Rest of product definition goes here -->

    </Product>
</Wix>

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

Я создал переменную win64Flag, чтобы другие элементы WiX работали нормально в кроссплатформенных сценариях .

17
ответ дан 3 December 2019 в 02:52
поделиться

Можно использовать оператор состояния (документация здесь ), который определит, на какой платформе запущена программа установки во время установки. Это позволит вам создать только одну программу установки, которая будет работать на всех платформах.

Тестом для 64-битной платформы является VersionNT64 и наоборот, тестом для не 64-битных платформ является NOT VersionNT64.

Например:

<Component Id="SomeComponentId" Guid="SomeGuid">
    <Condition>
        <![CDATA[NOT(VersionNT64)]]>
    </Condition>
    <File Id="SomeFile" Name="Somefile.exe" Source="$(var.UI.TargetDir)\ProjectOutput.exe" />
</Component>
11
ответ дан 3 December 2019 в 02:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: