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

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

Ответы [ 29 ]

50 голосов
/ 06 февраля 2010

Из статьи TechNet о 64-разрядных выпусках Office 2010 :

Если вы установили Office 2010 в том числе Microsoft Outlook 2010, Outlook устанавливает раздел реестра с именем Битность типа REG_SZ на компьютере, на котором она установлена. Bitness ключ реестра указывает, установлена ​​ли установка Outlook 2010 32-битный или 64-битный. Это может быть полезно для администраторов, которые заинтересованы в аудите компьютеров для определить установленные версии Офис 2010 в их организации.

  • Путь к реестру: HKEY_LOCAL_MACHINE \ Software \ Microsoft \ Office \ 14.0 \ Outlook
  • если вы установили Office 2013, используйте это Путь к реестру: HKEY_LOCAL_MACHINE \ Software \ Microsoft \ Office \ 15.0 \ Outlook
  • Ключ реестра: Битность
  • Значение: x86 или x64

и в другом месте той же статьи:

Начиная с Office 2010, Outlook является доступно как 32-битное приложение и 64-битное приложение. Версия (битность) Outlook, который вы выбираете зависит от редакции винды операционная система (32-разрядная или 64-разрядная) и выпуск Office 2010 (32- или 64-разрядный), который установлен на компьютер, если Office уже установлен на этом компьютере.

Факторы, определяющие осуществимость установки 32-битной или 64-битной версия Outlook включает следующее:

  • Вы можете установить 32-разрядную версию Office 2010 и 32-разрядную версию Microsoft Outlook 2010 в поддерживаемой 32-разрядной или 64-разрядной версии операционной системы Windows. Вы можете установить 64-разрядную версию Office 2010 и 64-разрядную версию Outlook 2010 только в поддерживаемой 64-разрядной операционной системе.
  • Установка Office 2010 по умолчанию в 64-разрядной версии операционной системы Windows - 32-разрядная версия Office 2010.
  • разрядность установленной версии Outlook всегда совпадает с разрядностью Office 2010, если Office установлен на одном компьютере. То есть 32-разрядную версию Outlook 2010 нельзя установить на тот же компьютер, на котором уже установлены 64-разрядные версии других приложений Office 2010, таких как 64-разрядная версия Microsoft Word 2010 или 64-разрядная версия Microsoft Excel 2010. Аналогично 64-разрядную версию Outlook 2010 нельзя установить на тот же компьютер, на котором уже установлены 32-разрядные версии других приложений Office.
23 голосов
/ 26 мая 2010

Я проверил ответ Отаку, и похоже, что значение битности Outlook установлено, даже если Outlook не установлен, хотя в указанной статье не указано, что это именно так.

9 голосов
/ 25 июля 2012

Чтобы добавить ответ vtrz, вот функция, которую я написал для Inno Setup:

const
  { Constants for GetBinaryType return values. }
  SCS_32BIT_BINARY = 0;
  SCS_64BIT_BINARY = 6;
  { There are other values that GetBinaryType can return, but we're }
  { not interested in them. }

{ Declare Win32 function  }
function GetBinaryType(lpApplicationName: AnsiString; var lpBinaryType: Integer): Boolean;
external 'GetBinaryTypeA@kernel32.dll stdcall';

function Is64BitExcelFromRegisteredExe(): Boolean;
var
  excelPath: String;
  binaryType: Integer;
begin
  Result := False; { Default value - assume 32-bit unless proven otherwise. }
  { RegQueryStringValue second param is '' to get the (default) value for the key }
  { with no sub-key name, as described at }
  { /782781/kak-poluchit-znachenie-reestra-v-inno-setup-esli-ono-ispolzuet-tolko-imya-po-umolchaniy }
  if IsWin64() and RegQueryStringValue(HKEY_LOCAL_MACHINE,
      'SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\excel.exe',
      '', excelPath) then begin
    { We've got the path to Excel. }
    try
      if GetBinaryType(excelPath, binaryType) then begin
        Result := (binaryType = SCS_64BIT_BINARY);
      end;
    except
      { Ignore - better just to assume it's 32-bit than to let the installation }
      { fail.  This could fail because the GetBinaryType function is not }
      { available.  I understand it's only available in Windows 2000 }
      { Professional onwards. }
    end;
  end;
end;
8 голосов
/ 27 апреля 2011

С сожалением говорю, но методы Otacku и @ clatonh у меня не работают - ни Outlook Bitness, ни {90140000-0011-0000- 1000 -0000000FF1CE} в реестре (для 64-битных Офис без установленного Outlook).

Единственный способ, который я нашел, но не через реестр, - это проверить битность одного из исполняемых файлов Office с помощью функции Windows API GetBinaryType (начиная с Windows 2000 Professional).

Например, вы можете проверить битность Winword.exe, путь которого хранится в
HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ Пути к файлам \ Winword.exe.

Вот фрагмент кода MFC:

CRegKey rk;
if (ERROR_SUCCESS == rk.Open(HKEY_LOCAL_MACHINE, 
  "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\App Paths\\Winword.exe", 
  KEY_READ)) {
    CString strWinwordPath;
    DWORD dwSize = MAX_PATH;
    if (ERROR_SUCCESS == rk.QueryStringValue(strWinwordPath, 
        strWinwordPath.GetBuffer(MAX_PATH), &dwSize)) {
            strWinwordPath.ReleaseBuffer();
            DWORD dwBinaryType;
            if (::GetBinaryType(strWinwordPath, &dwBinaryType)) {
                if (SCS_64BIT_BINARY == dwBinaryType) {
                    // Detected 64-bit Office 
                } else {
                    // Detected 32-bit Office 
                }
            } else {
                // Failed
            }
        } else {
            // Failed
        }
    } else {
    // Failed
}
5 голосов
/ 26 марта 2014

Внимание: запрос битности приложения Outlook НЕ работает надежно при вызове в среде .NET.

Здесь мы используем GetBinaryType () в DLL, которая может быть вызвана любым приложением:

  • Если хост-приложение является 64-битным C / C ++, GetBinaryType () возвращает SCS_32BIT_BINARY.
  • Если хост-приложение является 64-битным .NET (мы тестировали «AnyCPU» в 64-битной системе), GetBinaryType () возвращает SCS_64BIT_BINARY.

С одинаковым кодом DLL и точно таким же двоичным путем Outlook ("c: / Program Files (x86) / ...")) на одном компьютере.

Это означает, что вам может потребоваться проверить двоичный файл самостоятельно, используя запись "IMAGE_NT_HEADERS.FileHeader.Machine".

Боже, я ненавижу неправильные возвращаемые значения некоторых API Windows (см. Также GetVersion () ложь).

3 голосов
/ 04 апреля 2012

Я нашел такой подход:

Если существует HKLM \ Software \ WOW6432Node, тогда Windows является 64-битной.

Если существует HKLM \ Software \ WOW6432Node \ Microsoft \ Office, то Office является 32-разрядным.

Если HKLM \ Software \ WOW6432Node \ Microsoft \ Office не существует, но HKLM \ Software \ Microsoft \ Office существует, то Office является 64-разрядным.

Если HKLM \ Software \ WOW6432Node не существует, то Windows и Office являются 32-разрядными.

Источник: Форумы Technet

3 голосов
/ 24 апреля 2017

Я нашел способ проверки офисной битности.

Мы можем проверить разрядность Office 365 и 2016, используя этот ключ реестра:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\ClickToRun\Configuration

Платформа x86 для 32 бит.

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\ClickToRun\Configuration

Платформа x64 для 64 бит.

Пожалуйста, проверьте ...

2 голосов
/ 27 февраля 2015

Вот что я смог использовать в VBscript для обнаружения Office 64bit Outlook:

Dim WshShell, blnOffice64, strOutlookPath
Set WshShell = WScript.CreateObject("WScript.Shell")
blnOffice64=False
strOutlookPath=WshShell.RegRead("HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\outlook.exe\Path")
If WshShell.ExpandEnvironmentStrings("%PROCESSOR_ARCHITECTURE%") = "AMD64" And _
    not instr(strOutlookPath, "x86") > 0 then 
  blnOffice64=True
  wscript.echo "Office 64"
End If
2 голосов
/ 14 апреля 2016

Этот код InnoSetup работает для меня под Win 10x64 и Office 2016 x86 (используя «HKLM \ SOFTWARE \ Microsoft \ Office \ ClickToRun \ Configuration» и ключ «Platform»)

[Code]
const
  RegOffice='SOFTWARE\Microsoft\Office\ClickToRun\Configuration';
  RegOfficeKey='Platform';

/// <summary>
/// Get current HKLM version
/// </summary>
function GetHKLM: Integer;
begin
  if IsWin64 then
    Result := HKLM64
  else
    Result := HKLM32;
end;

/// <summary>
/// Check is Microsoft Office is installed or not
/// </summary>
function IsOfficeInstalled (): Boolean;
var
  platform: string;
begin
  RegQueryStringValue(GetHKLM(), RegOffice, RegOfficeKey, platform);
  if platform = 'x86' then begin
   SuppressibleMsgBox('Microsoft Office found (x86 version)' , mbConfirmation, MB_YESNO or MB_DEFBUTTON1, IDYES);
    Result := True;
  end else if platform = 'x64' then begin
    SuppressibleMsgBox('Microsoft Office found (x64 version)', mbConfirmation, MB_YESNO or MB_DEFBUTTON1, IDYES);
    Result := True;
  end else begin
    SuppressibleMsgBox('Microsoft Office NOT found' + platform + '.', mbConfirmation, MB_YESNO or MB_DEFBUTTON1, IDYES);
    Result := False;
  end;
end;
2 голосов
/ 10 августа 2010

Вы можете искать в реестре {90140000-0011-0000- 0000 -0000000FF1CE}. Если полужирные цифры начинаются с 0, то это x86, 1 - x64

Для меня это было в HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Office \ 14.0 \ Регистрация {90140000-0057-0000-0000-0000000FF1CE}

Источник

...