Определите, является ли Office 32-битным или 64-битным через реестр - PullRequest
50 голосов
/ 05 февраля 2010

Теперь, когда Office также поставляется с 64-битной установкой, где в реестре вы узнаете, является ли установленная версия Office 32-битной или 64-битной?

Ответы [ 29 ]

0 голосов
/ 15 апреля 2015

Найдите в реестре путь установки интересующего вас компонента Office, например, для Excel 2010 посмотрите в ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ (Wow6432Node) \ Microsoft \ Office \ 14.0 \ Excel \ InstallRoot.Это будет только в 32-битном реестре или в 64-битном реестре, но не в обоих.

0 голосов
/ 20 марта 2012

Эта статья в Википедии гласит:

В 64-битных версиях Windows есть две папки для файлов приложений; папка "Program Files" содержит 64-разрядные программы, а папка "Program Files (x86)" содержит 32-разрядные программы.

Так что, если программа установлена ​​под C:\Program Files, это 64-битная версия. Если он установлен в C:\Program Files (x86), это 32-разрядная установка.

0 голосов
/ 02 марта 2015

Вам не нужно это сценарий. Посмотрите на эту страницу, на которую я наткнулся:

https://social.msdn.microsoft.com/Forums/office/en-US/43499ae0-bcb5-4527-8edb-f5a955987b56/how-to-detect-whether-installed-ms-office-2010-is-32-or-64-bit?forum=worddev

Подведем итог:

Четвертое поле в коде продукта указывает битность продукта.

{BRMMmmmm-РРРР-LLLL- р 000-D000000FF1CE} P000

0 для x86, 1 для x64 0-1 (это также верно для MSOffice 2013)

0 голосов
/ 14 июня 2012

Я нашел безопасный и надежный способ в своем скрипте на основе InnoSetup, чтобы понять, является ли конкретное приложение 32-битным или 64-битным (в моем случае мне нужно было тестировать Excel), используя функцию Win32 API.Эта функция называется GetBinaryType(), она взята из `kernel32 '(несмотря на название, она встречается в 32- и 64-битном варианте) и смотрит прямо на заголовок exe.

0 голосов
/ 09 октября 2014

ПРИМЕЧАНИЕ. ХОРОШО: Функция обнаружения версии, указанная выше , не работает . У меня есть 64-битная версия Office и отдельная с 32-й версией. Обе версии, использующие эту функцию, возвращают «32-битную».

Проверка реестра вручную приводит к одному и тому же выводу: и 64-битный, и 32-битный (Office 2010 x64 и 32-битный Office 2013) отчет 32-битный.

Лично я считаю, что команда Office должна просто написать и поддерживать где-нибудь ключ реестра. Все надстройки должны ссылаться на это, и в настоящее время «угадывание» является плохим подходом для разработчиков, который приходится использовать.

0 голосов
/ 24 июня 2014

Раздел реестра Outlook Bitness не существует на моем компьютере.

Одним из способов определения битности Outlook является изучение самого Outlook.exe и определение, является ли он 32-битным или 64-битным.

В частности, вы можете проверить тип [IMAGE_FILE_HEADER.Machine] [1], и это вернет значение, указывающее тип процессора.

Чтобы получить отличную предысторию этого обсуждения, прочитав PE-заголовок файла, прочитайте this (устаревшая ссылка) , в котором говорится:

Структура IMAGE_NT_HEADERS является основным местом, где хранятся особенности PE-файла. Его смещение задается полем e_lfanew в IMAGE_DOS_HEADER в начале файла. На самом деле существует две версии структуры IMAGE_NT_HEADER, одна для 32-битных исполняемых файлов, а другая для 64-битных версий. Различия настолько незначительны, что я буду считать их одинаковыми для целей этого обсуждения. Единственный правильный, одобренный Microsoft способ различения этих двух форматов заключается в значении поля Magic в IMAGE_OPTIONAL_HEADER (описывается в ближайшее время).

IMAGE_NT_HEADER состоит из трех полей:

typedef struct _IMAGE_NT_HEADERS { DWORD Signature; IMAGE_FILE_HEADER FileHeader; IMAGE_OPTIONAL_HEADER32 OptionalHeader; } IMAGE_NT_HEADERS32, *PIMAGE_NT_HEADERS32;

и вы можете получить код c # здесь .

Поле Magic находится в начале структуры IMAGE_OPTIONAL_HEADER, 2 байта со смещением 24 от начала _IMAGE_NT_HEADERS. Он имеет значения 0x10B для 32-разрядных и 0x20B для 64-разрядных.

0 голосов
/ 29 июля 2012

Если кто-то хочет знать только, какой бит является установленной версией Office 2010, то в любом приложении Office 2010 просто нажмите «Файл», а затем «Справка». Информация о номере версии будет указана, а рядом в скобках будет (32-битная) или (64-битная).

0 голосов
/ 29 апреля 2019

РЕДАКТИРОВАТЬ: Решение без касания RegistryKeys - им жаль Op.

Я узнал, что в C # есть решение - оригинал можно найти здесь: https://blogs.msdn.microsoft.com/webdav_101/2016/07/26/sample-detecting-installed-outlook-and-its-bitness/

Я немного изменил его для своих нужд.

просто передайте правильный outlookPath в GetOutlookBitness ()

  public enum BinaryType : uint

    {
        SCS_32BIT_BINARY = 0, // A 32-bit Windows-based application
        SCS_64BIT_BINARY = 6, // A 64-bit Windows-based application.
        SCS_DOS_BINARY = 1, // An MS-DOS – based application
        SCS_OS216_BINARY = 5, // A 16-bit OS/2-based application
        SCS_PIF_BINARY = 3, // A PIF file that executes an MS-DOS – based application
        SCS_POSIX_BINARY = 4, // A POSIX – based application
        SCS_WOW_BINARY = 2 // A 16-bit Windows-based application
    }



    [DllImport("kernel32.dll")]
    static extern bool GetBinaryType(string lpApplicationName, out BinaryType lpBinaryType);




    public int GetOutlookBitness(string FilePath)
    {
        int bitness = 0;

        if (File.Exists(FilePath))
        {
            BinaryType type;
            GetBinaryType(FilePath, out type);


            switch (type)
            {
                case BinaryType.SCS_32BIT_BINARY:
                    bitness = 32;
                    break;
                case BinaryType.SCS_64BIT_BINARY:
                    bitness = 64;
                    break;
            }
        }

        return bitness;



    }
0 голосов
/ 01 февраля 2014

Откройте Outlook 2013> Файл> Учетная запись Office> О программе Outlook> нажмите большую кнопку «? О программе Outlook»> прочитайте всплывающее описание

...