Chirag B Ответов: 3

Как условно установить компоненты на основе типа архитектуры процессора (32-разрядная или 64-разрядная)?


Привет,

Я использую InstallShield 2009, базовый проект MSI, и мне нужно установить некоторые файлы условно на основе типа архитектуры процессора (32-разрядная или 64-разрядная). Я создал два отдельных компонента FILES64 и FILES32, которые содержат необходимые файлы и должны копировать файлы условно на INSTALLDIR.

т.е.
IF (32-битный) ЗАТЕМ
УСТАНОВКА FILES32
ЕЩЕ
УСТАНОВКА FILES64


Я попытался выбрать свойство Condition компонента с помощью диалогового окна Condition. Однако я не могу найти свойство installshield, которое указывает 32-разрядную или 64-разрядную версию. Может ли кто - нибудь помочь здесь?

Спасибо,
ЦБ

Sergey Alexandrovich Kryukov

Это определенная проблема, но вполне разрешимая. Посмотрите: есть много жалоб на InstallShield (который я никогда не использовал). Microsoft удаляет свой тип и шаблон "проект установки" из пакета Visual Studio.
Единственное полностью законное программное обеспечение для установки, которое я вижу сейчас,-это Microsoft WiX с открытым исходным кодом (совместимый с MSBuild и даже подключенный к VS). Я знаю, как сделать все это в WiX (что действительно потребует некоторого поиска или ответа). Поэтому, если вы согласитесь перейти на WiX, что я настоятельно рекомендую, я с удовольствием поделюсь исчерпывающей информацией о платформозависимой установке.

Это двояко: вы делаете это в зависимости от доступных архитектур набора целевых команд продукта, от архитектуры целевой машины или от того и другого.

—СА

[no name]

Большое спасибо за ваш ответ, СА! Мне, конечно, было бы интересно узнать больше о Microsoft WiX. Пожалуйста, поделитесь этой информацией.

Пожалуйста, обратите внимание, что ниже приведены два наиболее важных требования к моей настройке:
1) программа установки будет нуждаться в разрешениях администратора и должна иметь возможность вносить изменения в мою папку TARGETDIR. Во время установки мне нужно предоставить разрешения на чтение/запись в папку TARGETDIR, так как там будет находиться моя база данных приложений (SQL CE).
2) необходимо скопировать определенные файлы в TARGETDIR на основе архитектуры процессора (32-разрядной или 64-разрядной).

Спасибо,
ЦБ

Sergey Alexandrovich Kryukov

Оба ваших требования легко удовлетворяются WiX. В других системах установки некоторые вещи, подобные этому, требуют пользовательских шагов, но в WiX предопределенные действия включают такие вещи, как установка разрешений на любой объект файловой системы, разрешение установленной программе работать через Брандмауэр Windows и многое другое. Все действия могут быть предметом проверки архитектуры набора команд продукта и/или целевого компьютера (x86, x86-86, Itanium (IE64)).

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

—СА

[no name]

Большое спасибо, СА! Я уже погуглил о WiX, скачал и прочитал некоторую документацию о нем, но может потребоваться некоторое время, чтобы изучить и использовать его для моего развертывания. Я продолжу свою йогу на WiX, но, возможно, мне понадобится некоторая помощь по конкретным пунктам. Так что любая помощь будет очень признательна!

Sergey Alexandrovich Kryukov

Именно так. А пока смотрите мой первый ответ, на ваш первый пункт...
—СА

3 Ответов

Рейтинг:
25

Sergey Alexandrovich Kryukov

Позвольте мне сначала ответить на первый из двух вопросов, упомянутых в комментариях к этому вопросу. (Пожалуйста, смотрите все обсуждения.)

Я рекомендую использовать Microsoft open-source WiX, потому что это действительно законный продукт. Он соответствует требованиям, предъявляемым к надстройке Visual Studio; и его собственный установщик фактически устанавливает его на Visual Studio трех последних версий (в настоящее время). Что еще более важно, он представляет правильный интерфейс для MSBuild, который на самом деле является общедоступным мультиплатформенным стандартом. Даже существующий "проект установки", который поставляется вместе с Visual Studio, не является законным типом проекта MSBuild; он исключен из пакета начиная с Visual Studio V. 2012.

Пожалуйста смотрите:
http://en.wikipedia.org/wiki/WiX[^],
http://wixtoolset.org/[^].

Это документация и учебник:
http://wix.sourceforge.net/manual-wix3/main.htm[^],
http://wix.tramontana.co.hu/tutorial[^].

Итак, первый вопрос касался изменения разрешений в каком-либо объекте файловой системы. Например, предположим, что вы хотите установить разрешение некоторого каталога и сделать его чтение/запись всех пользователей. Хитрость заключается в следующем: вы должны использовать явные <CreateFolder> декларация. Обычно каталоги и файлы создаются только относительно целевого каталога верхнего уровня (который выбирается из предопределенного набора законных назначений), и они создаются неявно. Причина, по которой вам нужно использовать <CreateFolder> узел для уже объявленного каталога заключается в том, что он допускает дочерний узел <Permission> Вот как может выглядеть образец декларации. В этом примере я предполагаю, что разрешение изменяется в некотором каталоге, представляющем данные "всех пользователей", что является очень типичным случаем:

<DirectoryRef Id="AppDataLevel3">
    <Component Id="DataFiles" Guid="19DC5B16-B3E1-4e5d-A8B4-BF0FADA6AC5A">
        <File Id="ApplicationFile4" Source="SourceFiles/WiX.Very-specal-file.txt"/>
        <CreateFolder Directory="AppDataLevel2">
            <!-- only top level, down levels inherit -->
            <Permission User="Everyone" GenericAll="yes" />
        </CreateFolder>
    </Component>
</DirectoryRef>


Здесь вы должны понимать, что многие декларации приходят в "оригинальной" и "Ref" формах, таких как <Directory> и <DirectoryRef> или <Component> и <ComponentRef>, так что Id (см. образец выше) относится к некоторым предшествующим <Directory> декларация с тем же самым Id Когда вы познакомитесь с объявлениями каталогов, файлов и компонентов из исходной документации, это должно быть вам совершенно ясно.

Так вот, я использовал определенные User и GenericAll атрибуты для выбора целевого разрешения. Вы можете узнать, каковы другие варианты, например, из… технология IntelliSense. Да, WiX поддерживает Intellisense при использовании в качестве дополнения Visual Studio.

Вы также должны убедиться, что процесс установки запрашивает повышенные привилегии, потому что изменение разрешения требует этого. Для этого вы должны указать его на втором самом верхнем уровне проекта установки, под заголовком <Product> элемент:
<Product Id="*" ... >

    <Package InstallerVersion="200" InstallPrivileges="elevated" Compressed="yes" ... />
    <Media Id="1" Cabinet="product.cab" EmbedCab="yes" />

    <!-- ... -->

</Product>


Ваш второй вопрос касается архитектуры наборов инструкций. Синтаксис очень прост и легко найти, но мне нужно немного подумать о том, как его объяснить, чтобы избежать обычных путаниц. Позвольте мне сделать это немного позже; как я уже сказал выше, мне нужно больше свободного времени, чтобы сделать это.

Этого первого ответа должно быть достаточно, чтобы начать работу. Насчет второй части — я ее обещал…

—СА


Рейтинг:
2

Member 14517593

Это буквально самый глупый набор ответов, который я когда-либо слышал.
Вопрос: я с помощью InstallShield 2009.......
A: Ну, давайте замнем это, и я дам вам ответы для WiX вместо этого.

Это так же глупо, как если бы кто-то попросил помощи с FruityLoops на ПК, а они ответили: "ах, но вы можете сделать это вот так с Logic Pro на Mac".

Психический.


Однако, чтобы помочь вам решить проблему InstallShield 2009, в самом компоненте можно указать тип архитектуры. Помните, что это компонент, а не атрибут объекта.


OriginalGriff

Хотя я аплодирую вашему стремлению помогать людям, это хорошая идея придерживаться новых вопросов, а не 6-летних. После такого количества времени маловероятно, что оригинальный плакат вообще заинтересован в проблеме больше!
Ответы на старые вопросы можно рассматривать как охоту за репостами, которая является формой злоупотребления сайтом. Более триггерные счастливые среди нас начнут процесс запрета вас с сайта, если вы не будете осторожны. Придерживайтесь новых вопросов, и все будет хорошо.

CHill60

Вы можете подумать, что они глупы, но ясно, что ОП думал, что они были очень полезны, как и другие члены. OG упоминал, что охота за репостами рассматривается как форма злоупотребления сайтом, но также делает пренебрежительные комментарии о других членах. Вы увидите много решений, советующих плакатам пересмотреть свой инструмент выбора (особенно если они используют VB6) - это не недействительный совет.

Рейтинг:
13

Sergey Alexandrovich Kryukov

Теперь я даю обещанный ответ на процессоре архитектура набора инструкций и влияние различных архитектур на установку.

Прежде всего, полезно знать доступные архитектуры и их названия, так как их названия сбивают с толку. Насколько мне известно, установщик Windows в настоящее время применим к системам, использующим следующие 3 архитектуры: x86, x86-64 (AMD64) и Itanium (IE64). Все они несовместимы, но оба 64-разрядных процессора работают под управлением 32-разрядных процессов x86, и это поддерживается в Windows через WoW64. Пожалуйста смотрите:
http://en.wikipedia.org/wiki/Instruction_set[^],
http://en.wikipedia.org/wiki/X86[^],
http://en.wikipedia.org/wiki/X86-64[^],
http://en.wikipedia.org/wiki/Itanium[^],
http://en.wikipedia.org/wiki/WoW64[^].

Самая обычная 64-битная архитектура в наши дни-x86-64, но многие называют ее просто 64-битной или x64, но это не оригинальная 64-битная архитектура, которая на самом деле является IE64, в наши дни обычно известная как Itanium. Более дешевая и более обычная архитектура x86-64 была первоначально разработана компанией AMD (отсюда "AMD64") как расширение x86, а затем принята Intel, которая сохранила свой оригинальный IE64 для более дорогих систем более высокого уровня. Все это часто создает всевозможные путаницы.

Одним из способов обнаружения архитектуры во время выполнения с помощью установки, построенной с помощью WiX, является проверка переменная окружения PROCESSOR_ARCHITECTURE, таким образом, результаты будут зависеть от того, как Windows назовет эти архитектуры в соответствующей переменной. Эти архитектуры известны под следующими названиями: "x86", "AMD64" и "IE64".

Терминология MSBuild и Visual Studio отличается. Названия одних и тех же архитектур таковы "x86", "x64" и "Itanium" И вместо термина "архитектура набора инструкций" используется термин "платформа". Нам нужно будет использовать эту информацию ниже.

Вы можете идентифицировать систему работающую во время выполнения установки с помощью WiX <Condition> элемент, который может быть дочерним элементом элемента <Component> Таким образом, вы дискриминируете файлы, которые будут установлены на уровне компонентов. (Для других возможных элементов, которые могут использовать дочерний элемент <Condition>, пожалуйста, смотрите ссылку ниже.) Это может выглядеть так:

<DirectoryRef Id="CUSTOM.INSTALLATION.DIRECTORY">
   <Component Id="ApplicationFiles64" Guid="{4A91A21D-FC99-419C-8144-211DE78014C6}">
      <File Id="ApplicationFile1" Source="SourceFiles/Some-x86-file.dll" />
      <Condition> %PROCESSOR_ARCHITECTURE="x86" </Condition>
   </Component>
   <Component Id="ApplicationFiles64" Guid="{E59BB1E9-9B56-4355-BCDC-F03501D326A8}">
      <File Id="ApplicationFile1" Source="SourceFiles/Some-x86-64-file.dll" />
      <Condition> %PROCESSOR_ARCHITECTURE="AMD64" </Condition>
   </Component>
   <Component Id="ApplicationFiles64" Guid="{1AD7798A-BE64-4063-AD31-7F386371A150}">
      <File Id="ApplicationFile1" Source="SourceFiles/Some-IE64-file.dll" />
      <Condition> %PROCESSOR_ARCHITECTURE="IE64" </Condition>
   </Component>
</DirectoryRef>


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

Пожалуйста смотрите:
http://wix.sourceforge.net/manual-wix2/wix_xsd_condition.htm[^],
http://wix.sourceforge.net/manual-wix2/wix_xsd_component.htm[^].

Это не единственный подход, который вы можете использовать для подхода к мультиплатформенной/кросс-платформенной установке. Существует ряд причин, по которым вы можете захотеть создать разные MSI каждой платформы или объединить оба подхода. Создание MSI для каждой платформы хорошо поддерживается, если вы используете MSBuild и/или Visual Studio. Стандартный способ его поддержки заключается в использовании стандартных свойств $(Platform) и $(Configuration) В частности, вы можете иметь разные выходные каталоги для всех комбинаций платформ и комбинаций, если вы поместите в соответствующее определение свойства путь типа ..\..\$(Configuration)-$(Platform) (количество ".." будет зависеть от глубины каждого проекта относительно ваших общих выходных каталогов. Вы также можете поместить свой проект WiX в то же решение, что и ваш проект. Используя эту схему именования/пути (или любую другую схему, основанную на этой идее), вы можете поместить каждый тип результирующего файла MSI в тот же каталог, что и сам продукт, так что каждый MSI будет подбирать выходные файлы соответствующих архитектур наборов инструкций.

Но все же иногда вам нужно будет условно включить некоторые файлы из некоторых других источников или просто файлы с разными именами, в зависимости от архитектуры. Это очень типично, когда вам приходится развертывать некоторые сторонние исполняемые файлы, такие как DLL. Как это сделать?

Значение свойства MSBuild $(Configuration) как известно на Wix препроцессор Вот как вы его используете:
<?if $(var.Platform)="x86" ?>
   <!-- declare something for x86 -->
<?endif?>

<?if $(var.Platform)="x64" ?>
   <!-- declare something for x86-64 -->
<?endif?>

<?if $(var.Platform)="Itanium" ?>
   <!-- declare something for IE64 (Itanium) -->
<?endif?>


Вы также можете использовать <?else?>.

Об использовании препроцессора на Wix, пожалуйста, см.: http://wix.sourceforge.net/manual-wix2/preprocessor.htm[^].

—СА


[no name]

Ценю ваше время и усилия, чтобы помочь мне с этим и подробным ответом. Большое спасибо. Я смог создать базовую настройку (без диалогов GUI) и работает нормально. Мне еще предстоит изучить отображение диалоговых окон GUI для моей установки, но создание установки на основе XML-это здорово и легко. Одна из проблем, с которой я столкнулся до сих пор, - это ключи реестра... Я попытался добавить некоторые ключи реестра в свою установку, но не смог найти то же самое после установки, хотя я открыл regedit как администратор, чтобы проверить. Я все еще на 30% погружен в учебник и надеюсь, что он решит все мои проблемы с помощью бесплатного инструмента. Я буду держать вас в курсе...

Sergey Alexandrovich Kryukov

Мы всегда рады вам.

Работа с реестром описана, например, здесь:
http://wix.sourceforge.net/manual-wix3/write_a_registry_entry.htm

Удачи, звоните еще раз.
—СА

[no name]

До сих пор все шло хорошо. Я смог завершить свой учебник по WIX и построить настройку для своего продукта. Это довольно хорошо и легко узнать, так как я когда-то был разработчиком InstallShield, который делает то же самое внутренне.

1) я смог разрешить запись реестра на 64-битной машине, так как она направлялась на узел SysWow6432 вместо основного узла под HKLM\Software, просто добавив атрибут 64bit в yes.
2) я смог добавить компоненты, которые будут установлены на основе 64-битной и 32-битной архитектуры процессоров (хотя еще не тестировался на других машинах)
3) смог добавить разрешения на чтение/запись в INSTALLDIR в соответствии с вашим советом выше.

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

Это отличный инструмент плюс бесплатный и открытый исходный код. Я бы рекомендовал это и другим.

Большое Спасибо!
- КБ

Sergey Alexandrovich Kryukov

Я очень рад, что у тебя все хорошо получается. Я выбрал WiX стратегически только недавно. Интересно, Знаете ли вы, что было одним из положительных факторов? Некоторые очень негативные отзывы от некоторых пользователей. Я смог распознать: это был тот случай, когда определенные люди, которые ненавидят что-то хорошее и любят что-то плохое, являются показательными. Ручной характер кода установки фактически приводит к лучшей ремонтопригодности.

—СА

Ron Beyer

+5, красиво объяснено.

Sergey Alexandrovich Kryukov

Спасибо, Рон. Ну, это заняло некоторое время... :-)
—СА

Nelek

Хороший ответ. :большой палец вверх: +5

Sergey Alexandrovich Kryukov

Спасибо, Нелек.
—СА

HaymakerAJW

Возможно, он и изменился, но x86 работает не для меня, а для Win32. Так что если у вас возникли проблемы, дайте ему переключатель и посмотрите, работает ли он.

http://wixtoolset.org/documentation/manual/v3/votive/votive_project_references.html