Как получить доступ к свойству TargetPlatform в условии запуска?
-
30-09-2019 - |
Вопрос
Я пытаюсь получить доступ к значению свойства TargetPlatform (которое вы можете установить в проекте развертывания) из условия в «Условии запуска».
По сути, я пытаюсь сказать приложению, чтобы оно не устанавливалось как 32-битное приложение, если на этом компьютере установлена 64-битная версия Office.Поэтому мне нужно как-то узнать разрядность приложения и привести его в состояние запуска.
Разрядность Office я могу получить из реестра, но не знаю, как получить доступ к TargetPlatform из установщика.
Спасибо!
Решение
Вот две ссылки:
Из приведенной выше ссылки вы можете сделать вывод, что вы не можете настроить обе платформы с помощью установщика MSI.Вам понадобится два установщика.В зависимости от того, как построен установщик, x86 или x64, будет зависеть то, как установщик интерпретирует некоторые константы, которые указывают, где находятся не все файлы: Программные файлы, или Программные файлы (x86).
Вы не можете изменить TargetPlatform установщика во время выполнения.
Что вы можете сделать, возможно, так это упаковать два установщика в третий и на основе установленной версии Office, которую, как вы говорите, вы можете запустить либо субинсталлятор x86, либо субинсталлятор x64, который фактически установит файлы приложения.
Если установщик MSI не является крайним требованием, я бы выбрал НСИС.Если нет, то хотя бы упакуйте установщики MSI в NSIS.Это невероятно легкий.Судя по опыту, NSIS намного круче, чем MSI.
Другие советы
Я прочитал этот вопрос несколько раз и не уверен на 100%, что понимаю, что вы пытаетесь сделать.У вас есть 32-битное приложение, и вы хотите установить его только в том случае, если у него установлен 32-битный Office (я полагаю, 2010)?Есть ли у вас также 64-битная версия, которую вы хотите установить, если установлен 64-битный офис?
Я не уверен, почему вам нужно заботиться о свойстве TargetPlatform, потому что если вы знаете, что установлен 64-битный Office, вы по определению должны быть 64-битной ОС.Если установлен 32-битный Office, у вас может быть 64-битная ОС, но имеет ли это значение?Вы сказали, что вас волнует разрядность Office, а не Windows.
Из того, что я прочитал, я думаю, что если у вас есть AppSearch, который извлекает битность в свойство, вы могли бы просто использовать LaunchCondition, которое использует это свойство вместе с «или Установлено» (чтобы обеспечить возможность удаления вашего приложения если Office был удален первым), и все будет в порядке.
Добавьте настраиваемое действие перед началом установки для выполнения проверки.Используйте Установщик класс для выполнения специального действия.Вы можете использовать OnBeforeInstall
событие для чтения раздела реестра и проверки разрядности при необходимости.Вызов исключения приведет к прерыванию установки, но может быть более чистый способ сделать это.