Подтвердить что ты не робот

Определите, является ли Office 32-битным или 64-битным через реестр

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

4b9b3361

Ответ 1

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

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

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

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

Начиная с Office 2010, Outlook доступный как 32-битное приложение и 64-битное приложение. Версия (битности) Outlook, который вы выбираете зависит от выпуска Windows операционная система (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.

Ответ 2

Я тестировал ответ Otaku, и кажется, что значение битрейта Outlook установлено даже тогда, когда Outlook не установлен, хотя ссылка на статью явно не указывает, что это будет так.

Ответ 3

Чтобы добавить к ответу 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 '[email protected] 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 }
  { http://stackoverflow.com/questions/913938/ }
  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 32-bit than to let the installation }
      { fail.  This could fail because the GetBinaryType function is not }
      { available.  I understand it only available in Windows 2000 }
      { Professional onwards. }
    end;
  end;
end;

Ответ 4

С уважением, но оба метода Otacku и @clatonh не работают для меня - ни у Outlook Bitness, ни для {90140000-0011-0000- 1000 -0000000FF1CE} в реестре (для 64- разрядный Office без 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

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

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

  • Если хост-приложение является 64-битным 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() ложь).

Ответ 6

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

Если 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

Ответ 7

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

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

Источник

Ответ 8

Вот что я смог использовать в 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

Ответ 9

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

[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;

Ответ 10

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

Мы можем проверить битту офиса 365 и 2016, используя этот раздел реестра:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\ClickToRun\Configuration

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

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\ClickToRun\Configuration

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

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

Ответ 11

У меня нет ключа с именем bitness в любой из этих папок. У меня есть ключ, называемый "по умолчанию" в обеих этих папках, и значение "не задано". На моем компьютере появился стартер Office 2010 (предположим, 64 бит). Я удалил его и попытался выполнить полную установку 32-битного офиса. Я продолжаю получать следующее сообщение. файл несовместим, проверьте, нужна ли вам x86 или x64 версия программы.

какой-нибудь совет для меня?

Ответ 12

@clatonh: это путь к реестру на моем ПК: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\14.0\Регистрация {90140000-002A-0000-1000-0000000FF1CE} и это определенно 32-битная установка на 64-битной ОС.

Ответ 13

Я ранее слепо следовал за ответом на основе документов MSDN. Сегодня это оказалось меньше, чем необходимо. На компьютере с установленным Office Home и Student, который не включает Outlook, присутствовал HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Office\14.0\Outlook, но HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\14.0\Outlook не был. Теперь я изменил свой код, чтобы сначала найти "обычную" версию, отличную от Wow6432Node. Если это присутствует, оно будет использоваться. Если нет, это будет продолжаться, посмотрев версию Wow6432Node. Это проверяется установщиком Inno Setup - я не знаю, какие API-интерфейсы Inno Setup используют. Если ваше приложение не имеет доступа к реестру одинаково, вы можете увидеть разные результаты.

Ответ 14

Я написал это для Outlook в первую очередь. Немного изменил его для Word, но он не будет работать при автономной установке, потому что этот ключ не показывает разрядность, только Outlook.

Кроме того, я написал это для поддержки только текущих версий Office, => 2010

Я снял все настройки и пост-обработку...

:checkarch
    IF NOT "%PROCESSOR_ARCHITECTURE%"=="x86" SET InstallArch=64bit
    IF "%PROCESSOR_ARCHITEW6432%"=="AMD64" SET InstallArch=64bit
    IF "%InstallArch%"=="64bit" SET Wow6432Node=\Wow6432Node
GOTO :beginscript

:beginscript
SET _cmdDetectedOfficeVersion=reg query "HKEY_CLASSES_ROOT\Word.Application\CurVer"
@FOR /F "tokens=* USEBACKQ" %%F IN ('!_cmdDetectedOfficeVersion! 2^>NUL ') DO (
SET _intDetectedOfficeVersion=%%F
)
set _intDetectedOfficeVersion=%_intDetectedOfficeVersion:~-2%


:switchCase
:: Call and mask out invalid call targets
    goto :case!_intDetectedOfficeVersion! 2>nul || (
:: Default case
    ECHO Not installed/Supported
    )
  goto :case-install

:case14
    Set _strOutlookVer= Word 2010 (!_intDetectedOfficeVersion!)
    CALL :GetBitness !_intDetectedOfficeVersion!
    GOTO :case-install  
:case15
    Set _strOutlookVer= Word 2013 (!_intDetectedOfficeVersion!)
    CALL :GetBitness !_intDetectedOfficeVersion!
    GOTO :case-install
:case16
    Set _strOutlookVer= Word 2016 (!_intDetectedOfficeVersion!)
    CALL :GetBitness !_intDetectedOfficeVersion!
    goto :case-install
:case-install
    CALL :output_text !_strOutlookVer! !_strBitness! is installed
GOTO :endscript


:GetBitness
FOR /F "tokens=3*" %%a in ('reg query "HKLM\Software%Wow6432Node%\Microsoft\Office\%1.0\Outlook" /v Bitness 2^>NUL') DO Set _strBitness=%%a
GOTO :EOF

Ответ 15

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

  1. Создание экземпляров Excel
  2. Добавляет книгу в этот экземпляр Excel
  3. Добавляет модуль VBA в эту книгу
  4. Внедряет небольшую функцию VBA, которая возвращает разрядность Office
  5. Вызывает эту функцию
  6. Очищает

Вот этот подход, реализованный в VBScript:

Function OfficeBitness()

    Dim VBACode, Excel, Wb, Module, Result

    VBACode = "Function Is64bit() As Boolean" & vbCrLf & _
              "#If Win64 Then" & vbCrLf & _
              "    Is64bit = True" & vbCrLf & _
              "#End If" & vbCrLf & _
              "End Function"

    On Error Resume Next
    Set Excel = CreateObject("Excel.Application")
    Excel.Visible = False
    Set Wb = Excel.Workbooks.Add
    Set Module = Wb.VBProject.VBComponents.Add(1)
    Module.CodeModule.AddFromString VBACode
    Result = Excel.Run("Is64bit")
    Set Module = Nothing
    Wb.Saved = True
    Wb.Close False
    Excel.Quit
    Set Excel = Nothing
    On Error GoTo 0
    If IsEmpty(Result) Then
        OfficeBitness = 0 'Alternatively raise an error here?
    ElseIf Result = True Then
        OfficeBitness = 64
    Else
        OfficeBitness = 32
    End If

End Function

PS. Этот подход работает медленнее, чем другие (около 2 секунд на моем ПК), но он может оказаться более надежным в разных установках и версиях Office.

Через несколько месяцев я понял, что может быть более простой подход, хотя и тот, который создает экземпляр Excel. VBScript это:

Function OfficeBitness()
    Dim Excel
    Set Excel = CreateObject("Excel.Application")
    Excel.Visible = False
    If InStr(Excel.OperatingSystem,"64") > 0 Then
        OfficeBitness = 64
    Else
        OfficeBitness = 32
    End if
    Excel.Quit
    Set Excel = Nothing
End Function

Это зависит от того факта, что Application.OperatingSystem при вызове из 32-разрядной версии Excel в 64-разрядной версии Windows возвращает Windows (32-bit) NT 10.00 или, по крайней мере, на моем компьютере. Но это не упоминается в документах.

Ответ 16

У меня есть победа 7 64 бит + Excel 2010 32 бит. Реестр: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\14.0\Registration {90140000-002A-0000-1000-0000000FF1CE}

Таким образом, это может указывать битту ОС, а не битту Office

Ответ 17

В этой статье в Википедии говорится:

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

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

Ответ 18

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

Ответ 19

Еще один способ обнаружить битовость Office - это найти typelib.

Например, чтобы обнаружить битрейт Outlook, напишите файл .JS следующим образом:

function detectVersion()
    var outlooktlib = "TypeLib\\{00062FFF-0000-0000-C000-000000000046}";
    var HKCR = 0x80000000;

    var loc = new ActiveXObject("WbemScripting.SWbemLocator");
    var svc = loc.ConnectServer(null,"root\\default");
    var reg = svc.Get("StdRegProv");

    var method = reg.Methods_.Item("EnumKey");
    var inparam = method.InParameters.SpawnInstance_();
    inparam.hDefKey = HKCR;
    inparam.sSubKeyName = outlooktlib;
    var outparam = reg.ExecMethod_(method.Name,inparam);
    tlibver = outparam.sNames.toArray()[0];

    method = reg.Methods_.Item("GetStringValue");
    inparam = method.InParameters.SpawnInstance_();
    inparam.hDefKey = HKCR;
    inparam.sSubKeyName = outlooktlib + "\\" + tlibver + "\\0\\win32";
    inparam.sValueName = "";
    outparam = reg.ExecMethod_(method.Name,inparam);
    if(outparam.sValue) return "32 bit";

    method = reg.Methods_.Item("GetStringValue");
    inparam = method.InParameters.SpawnInstance_();
    inparam.hDefKey = HKCR;
    inparam.sSubKeyName = outlooktlib + "\\" + tlibver + "\\0\\win64";
    inparam.sValueName = "";
    outparam = reg.ExecMethod_(method.Name,inparam);
    if(outparam.sValue) return "64 bit";

    return "Not installed or unrecognizable";
}

Вы можете узнать другой идентификатор typelib Office и заменить первую строку функции для него. Вот краткий список интересных идентификаторов:

{4AFFC9A0-5F99-101B-AF4E-00AA003F0F07} - Access
{00020905-0000-0000-C000-000000000046} - Word
{00020813-0000-0000-C000-000000000046} - Excel
{91493440-5A91-11CF-8700-00AA0060263B} - Powerpoint
{0002123C-0000-0000-C000-000000000046} - Publisher
{0EA692EE-BB50-4E3C-AEF0-356D91732725} - OneNote 2010+
{F2A7EE29-8BF6-4A6D-83F1-098E366C709C} - OneNote 2007

Все указанные выше идентификаторы lib были найдены с помощью инструмента SDK Windows OLE-COM Object Viewer, вы могли бы узнать больше lib id, используя его.

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

Ответ 20

На моем компьютере не существует ключа реестра Microsoft Outlook.

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

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

Для превосходного фона этого обсуждения, прочитав PE-заголовок файла, прочитайте эту (устаревшую ссылку), в которой говорится;

Структура 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;

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

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

Ответ 21

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

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

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

Ответ 22

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

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)

Ответ 23

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

Ответ 24

Не через реестр, а через инструменты командной строки:

fooobar.com/questions/113603/...

C:\Users\me > assoc.msg

.msg = Outlook.File.msg.15

C:\Users\me > ftype Outlook.File.msg.15

Outlook.File.msg.15 = "C:\Program Files (x86)\Microsoft Office\Root\Office16\OUTLOOK.EXE" /f "% 1"

Ответ 25

Самый простой способ: поместите значок "О программе" в приложение Office 2016. Пример Excel

1) Откройте Excel → Файл → Параметры → Настроить ленту

2) Вы увидите 2 панели. Выберите команду "Отменить" и "Настроить ленту"

3) Из команды "Выбрать" выберите "Все команды"

4) Из результирующего списка High About About (Excel)

5) Настройте ленту Pain, выделите любой элемент (например, View), где вы хотите поместить значок About

6) Нажмите "Новая группа" внизу

7) Нажмите кнопку добавления, расположенную между двумя панелями. СДЕЛАНО

Теперь, когда вы нажимаете вкладку "Вид" в Excel и щелкаете по ней, вы увидите 32-битный или 64-битный

Ответ 26

Я нашел намного более простой способ. Используя Powershell, мы можем подключить Excel как COM-объект.

$user = $env:UserName
$msoExcel = New-Object -ComObject Excel.Application  
$msoExcel | Select-Object -Property OperatingSystem | Out-File "\\SERVER\Path\To\Dump\msoVersion-$user.txt"
exit

При запросе операционной системы таким образом мы получаем странные результаты, посмотреть здесь. PC3 - мой.

Надеюсь, это сработает для вас, ребята. Извините за недостаток кода; мои скрипты в основном функциональны.

Изменить: Не забудьте добавить код, чтобы закрыть Excel после того, как вы выполнили поиск данных.
После тестирования этого кода вчера у меня появилось огромное количество Excel и внезапно сработало.

Это будет гарантировать, что пользователи и администраторы будут рады (:

[System.Runtime.Interopservices.Marshal]::ReleaseComObject($msoExcel)
Remove-Variable msoExcel

Ответ 27

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

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

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

просто передайте правильный 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;



    }

Ответ 28

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

Ответ 29

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