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