문제

이제 사무실은 64 비트 설치로 제공되며 레지스트리에서 설치된 사무실 버전이 32 비트 또는 64 비트인지 알아?

도움이 되었습니까?

해결책

Technet 기사에서 Office 2010의 64 비트 에디션:

Microsoft Outlook 2010을 포함하여 Office 2010을 설치 한 경우 Outlook은 이름이 지정된 레지스트리 키를 설정합니다. 큰 소리 유형의 reg_sz 설치된 컴퓨터에서. 그만큼 큰 소리 레지스트리 키는 Outlook 2010 설치가 32 비트 또는 64 비트인지 여부를 나타냅니다. 이는 컴퓨터 감사에 관심이있는 관리자에게 유용하여 조직에 설치된 Office 2010을 결정합니다.

  • 레지스트리 경로 : hkey_local_machine 소프트웨어 Microsoft Office 14.0 Outlook
  • Office 2013을 설치 한 경우이 레지스트리 경로를 사용하십시오. hkey_local_machine Software Microsoft Office 15.0 Outlook
  • 레지스트리 키 : 큰 소리
  • 값 : X86 또는 X64

그리고 같은 기사의 다른 곳 :

Office 2010부터 Outlook은 32 비트 응용 프로그램 및 64 비트 응용 프로그램으로 제공됩니다. 선택한 Outlook의 버전 (Bitness)은 Windows 운영 체제 (32 비트 또는 64 비트)의 판과 컴퓨터에 설치된 Office 2010 (32 또는 64 비트)에 따라 다릅니다. 사무실은 이미 해당 컴퓨터에 설치되어 있습니다.

32 비트 또는 64 비트 버전의 Outlook을 설치할 수있는 타당성을 결정하는 요소는 다음과 같습니다.

  • 32 비트 사무실 2010 및 32 비트 Microsoft Outlook 2010을 지원되는 32 비트 또는 64 비트 에디션의 Windows 운영 체제에 설치할 수 있습니다. 지원되는 64 비트 운영 체제에 64 비트 버전의 Office 2010 및 64 비트 Outlook 2010을 설치할 수 있습니다.
  • 64 비트의 Wind
  • 설치된 버전의 Outlook 버전의 비점은 Office가 동일한 컴퓨터에 설치된 경우 Office 2010의 Bitness와 항상 동일합니다. 즉, 64 비트 Microsoft Word 2010 또는 64 비트 Microsoft Excel 2010과 같은 64 비트 버전의 다른 Office 2010 애플리케이션이 이미 설치된 동일한 컴퓨터에 32 비트 버전의 Outlook 2010을 설치할 수 없습니다. , 64 비트 버전의 Outlook 2010은 32 비트 버전의 다른 사무실 응용 프로그램이 이미 설치된 동일한 컴퓨터에 설치할 수 없습니다.

다른 팁

Otaku의 답변을 테스트했으며 Outlook Bitness 값은 Outlook이 설치되지 않은 경우에도 설정된 것으로 보입니다.

vtrz의 답변에 추가하기 위해 여기에 Inno 설정에 쓴 기능이 있습니다.

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 }
  { 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'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;

후회하지만, Otacku와 @Clatonh의 방법은 모두 작동하지 않습니다.1000레지스트리에서 -0000000ff1ce} (Outlook이 설치되지 않은 64 비트 사무실).

그러나 레지스트리를 통한 것이 아니라 내가 찾은 유일한 방법은 Windows API 기능을 사용하여 사무실 실행 파일 중 하나에 대한 Bitness를 확인하는 것입니다. getbinarytype (Windows 2000 Professional 이후).

예를 들어, winword.exe의 Bitness를 확인할 수 있습니다.
hkey_local_machine 소프트웨어 microsoft Windows currentVersion app paths 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
}

주의 : Outlook 애플리케이션의 물린 쿼리 확실하게 작동하지 않습니다 .NET 환경에서 호출 된 경우.

여기서는 모든 응용 프로그램에서 호출 할 수있는 DLL에서 getBinaryType ()를 사용합니다.

  • 호스트 응용 프로그램이 64 비트 C/C ++ 인 경우 getBinaryType ()는 SCS_32BIT_BINARY를 반환합니다.
  • 호스트 애플리케이션이 64 비트 .NET (64 비트 시스템에서 "anyCPU"를 테스트 한 경우) 인 경우 getBinaryType ()는 SCS_64BIT_BINARY를 반환합니다.

동일한 컴퓨터에서 정확히 동일한 DLL 코드와 정확히 동일한 Outlook Binary Path ( "C :/Program Files (x86)/...")를 사용합니다.

즉, "image_nt_headers.fileHeader.Machine"항목을 사용하여 바이너리 파일을 직접 테스트해야 할 수도 있습니다.

신, 나는 일부 Windows API의 잘못된 반환 값을 싫어합니다 (getVersion () 거짓말 참조).

사무실 물린을 확인하는 방법을 찾았습니다.

이 레지스트리 키를 사용하여 Office 365 및 2016 Bitness를 확인할 수 있습니다.

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\ClickToRun\Configuration

32 비트의 플랫폼 X86.

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\ClickToRun\Configuration

64 비트의 플랫폼 X64.

확인해주십시오...

나는이 접근법을 발견했다 :

HKLM Software WOW6432Node가 존재하면 Windows는 64 비트입니다.

HKLM Software wow6432Node Microsoft Office가 존재하면 사무실은 32 비트입니다.

HKLM Software wow6432Node Microsoft Office가 존재하지 않지만 HKLM Software Microsoft Office가 존재하는 경우 Office는 64 비트입니다.

HKLM Software WOW6432Node가 존재하지 않으면 Windows와 Office는 32 비트입니다.

원천: 테크넷 포럼

다음은 VBScript에서 사용할 수있는 내용입니다. Office 64 비트 전망을 감지합니다.

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

{90140000-0011-0000-의 레지스트리를 검색 할 수 있습니다.0000-0000000ff1ce}. 굵은 숫자가 0으로 시작하면 x86, 1은 x64입니다.

나를 위해 그것은 hkey_local_machine Software Microsoft Office 14.0 등록 {901400-0057-0000-0000-0000000ff1ce}에있었습니다.

원천

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

이 폴더 중 하나에 Bitness라는 키가 없습니다. 이 폴더 모두에 "기본값"이라는 키가 있으며 값은 "Unset"입니다. 내 컴퓨터는 Office 2010 스타터와 함께 제공됩니다 (64 비트라고 가정합니다). 나는 그것을 제거하고 32 비트 사무실을 완전히 설치하려고 노력했다. 나는 다음과 같은 메시지를 계속 받고 있습니다. 파일은 호환되지 않으므로 프로그램의 X86 또는 X64 버전이 필요한지 확인하십시오.

나에게 조언이 있습니까?

@Clatonh : 이것은 내 PC의 레지스트리의 경로입니다. OS.

나는 이전에 MSDN 문서를 기반으로 한 답변을 맹목적으로 따랐습니다. 오늘날, 이것은 필요한 것보다 적은 것으로 판명되었습니다. Outlook이 포함되지 않는 Office Home 및 Student가 설치된 기계에서 HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Office\14.0\Outlook 존재했지만 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\14.0\Outlook 아니였다. 이제 코드를 먼저 "일반"비 가우 6432node 버전을 찾도록 변경했습니다. 그것이 존재한다면, 그것은 사용될 것입니다. 그렇지 않은 경우 WOW6432NODE 버전을 살펴보면 계속됩니다. 이것은 Inno 설정 기반 설치 프로그램에서 확인 중입니다. APIS 이노 설정이 어떤 API를 사용하는지 모르겠습니다. 앱이 동일한 방식으로 레지스트리에 액세스하지 않으면 다른 결과가 표시 될 수 있습니다.

나는 처음에 전망을 위해 이것을 썼다. 단어를 위해 약간 수정되었지만 그 키에는 Bitness가 표시되지 않기 때문에 독립형 설치에서는 작동하지 않습니다. Outlook 만 그렇습니다.

또한 현재 버전의 사무실 만 지원하기 위해 썼습니다. => 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

내 테스트에서 여기에 설명 된 많은 접근 방식이 실패합니다. 사무실 버전, 설치 방법 등에 따라 확실하게 존재하지 않는 Windows 레지스트리의 항목에 의존하기 때문에 다른 접근 방식은 사용하지 않는 것입니다. 레지스트리는 전혀 (알겠습니다. 너무 엄격하게 제기 된 질문에 대한 답이 아닌) 대신 다음과 같은 스크립트를 작성합니다.

  1. Excel을 인스턴스화합니다
  2. 해당 Excel 인스턴스에 통합 문서를 추가합니다
  3. 해당 통합 문서에 VBA 모듈을 추가합니다
  4. 사무실의 물린을 반환하는 작은 VBA 기능을 주입합니다.
  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

추신. 이 접근법은 여기 다른 사람들보다 느리게 진행되지만 (내 PC에서 약 2 초) 다른 설치 및 사무실 버전에서 더 신뢰할 수있는 것으로 판명 될 수 있습니다.

몇 달이 지난 후에도 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, 64 비트 Windows의 32 비트 Excel에서 호출되면 반환 Windows (32-bit) NT 10.00 아니면 적어도 내 PC에서 수행됩니다. 그러나 그것은 언급되지 않았습니다 문서.

나는 7 64 비트 + Excel 2010 32 비트를 이기고 있습니다. 레지스트리는 hkey_local_machine Software Microsoft Office 14.0 등록 {90140000-002A-0000-1000-0000000ff1ce}입니다.

그래서 이것은 사무실의 물린이 아니라 OS의 물린을 알 수 있습니다.

innosetup 기반 스크립트에서 특정 응용 프로그램이 32 비트 또는 64 비트인지 (내 경우에는 Excel을 테스트해야 함)를 Win32 API 기능을 사용하여 안전하고 신뢰할 수있는 방법을 찾았습니다. 이 기능이 호출됩니다 GetBinaryType(), 그것은`kernel32 '에서 나오고 (이름에도 불구하고 32와 64 비트 맛이 나옵니다) Exe의 헤더를 직접 살펴 봅니다.

이 위키 백과 기사 상태 :

64 비트 버전의 Windows에는 응용 프로그램 파일을위한 두 개의 폴더가 있습니다. 그만큼 "Program Files" 폴더에는 64 비트 프로그램이 포함되어 있습니다 "Program Files (x86)" 폴더에는 32 비트 프로그램이 포함되어 있습니다.

따라서 프로그램이 아래에 설치된 경우 C:\Program Files 64 비트 버전입니다. 아래에 설치된 경우 C:\Program Files (x86) 32 비트 설치입니다.

사무실의 물린을 감지하는 또 다른 방법은 typelib를 찾는 것입니다.

예를 들어, Outlook의 Bitness를 감지하려면 다음과 같이 .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 ID를 찾아서 기능의 첫 번째 줄을 교체 할 수 있습니다. 흥미로운 ID의 간단한 목록은 다음과 같습니다.

{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 id는 Windows SDK 도구를 통해 발견되었습니다. OLE-COM Object Viewer, 당신은 그것을 사용하여 더 많은 lib ID를 찾을 수 있습니다.

이 접근법의 이점은 모든 버전의 사무실에서 작동하며 관심있는 모든 단일 구성 요소에 대한 제어를 제공한다는 것입니다. 또한 이러한 키는 hkey_classes_root에 있고 시스템에 깊이 통합되어 있기 때문에 샌드 박스 환경에서도 액세스 할 수 없었을 가능성이 높습니다.

참고 : 위에 나열된 검출 기능 기능 작동하지 않습니다. 64 비트 버전의 Office가 있고 32 개가있는 별도 버전이 있습니다.이 기능을 사용하는 두 버전은 "32 비트"를 반환합니다.

레지스트리를 수동으로 확인하면 동일한 결론이 발생합니다. 64와 32 비트 (Office 2010 X64 및 Office 2013 32 비트) 보고서 32 비트.

개인적으로 저는 사무실 팀이 단순히 레지스트리 키를 쉽게 얻을 수있는 레지스트리 키를 작성하고 유지해야한다고 생각합니다. 이를 참조 해야하는 모든 추가 기능이 필요하며 현재 "추측"은 개발자가 강요 해야하는 경우가 열악한 접근 방식입니다.

스크립트 할 필요가 없습니다. 내가 발견 한이 페이지를보십시오.

https://social.msdn.microsoft.com/forums/office/en-us/43499ae0-bcb5-4527-8edb-f5a955987b56/how-to-detect-whether-instalded-ms-force-2010-is-32- OR-64 비트? 포럼 = WordDev

요약:

ProductCode의 네 번째 필드는 제품의 비트를 나타냅니다.

{brmmmmmmmp-pppp-llll-000-d000000ff1ce} p000

x86의 경우 0, x64 0-1의 경우 1 (이것은 Msoffice 2013의 경우에도 적용됩니다)

관심있는 사무실 구성 요소의 설치 경로에 대한 레지스트리를 검색하십시오. 32 비트 레지스트리 또는 64 비트 레지스트리에만 있지 않습니다.

내 컴퓨터에는 Outlook Bitness Registry 키가 존재하지 않습니다.

Outlook Bitness를 결정하는 한 가지 방법은 Outlook.exe 자체를 검사하고 32 비트 또는 64 비트인지 확인하는 것입니다.

구체적으로 [image_file_header.machine] [1] 유형을 확인할 수 있으며 프로세서 유형을 나타내는 값을 반환합니다.

이 토론의 훌륭한 배경을 보려면 파일의 PE 헤더를 읽는 데있어 이 (오래된 링크), 어느 상태;

image_nt_headers 구조는 PE 파일의 세부 사항이 저장되는 기본 위치입니다. 오프셋은 파일 시작시 Image_dos_header의 e_lfanew 필드에 의해 제공됩니다. 실제로 Image_NT_Header 구조에는 실제로 32 비트 실행 파일이 있고 다른 하나는 64 비트 버전의 두 가지 버전이 있습니다. 차이점은 너무 미미하기 때문에이 토론의 목적으로 동일하다고 생각할 것입니다. 두 형식을 차별화하는 유일한 올바른 Microsoft 승인 방법은 image_optional_header의 Magic Field 값을 통한 것입니다 (곧 설명).

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 Field는 image_optional_header 구조의 시작 부분에 있으며, _image_nt_headers의 시작부터 오프셋 24에서 2 바이트가 있습니다. 32 비트의 경우 0x10b, 64 비트의 경우 0x20b 값이 있습니다.

레지스트리를 통한 것이 아니라 CommandLine 도구를 통해 :

https://stackoverflow.com/a/6194710/2885897

C : Users Me> Assoc .msg

.msg = Outlook.file.msg.15

C : user me> ftype Outlook.file.msg.15

Outlook.file.msg.15 = "C : Program Files (x86) Microsoft Office Root Office16 Outlook.exe " /f"%1 "

가장 쉬운 방법 : 사무실 2016 응용 프로그램에 아이콘에 대한 아이콘을 넣으십시오. 예제 Excel

1) Excel 열기 -> 파일 -> 옵션 -> 리본 사용자 정의

2) 당신은 2 개의 창을 참조하십시오. 리본에서 명령을 선택하고 사용자 정의하십시오

3) 선택 명령에서 모든 명령을 선택하십시오

4) 결과 목록에서 하이라이트 (Excel)

5) 리본 통증 사용자 정의에서 아이콘에 대한 아이콘을 넣을 위치를 강조 표시하십시오 (예 :보기)

6) 하단에서 새 그룹을 클릭하십시오

7) 두 창 사이에 위치한 추가 버튼을 클릭하십시오. 완료

이제 Excel에서보기 탭을 클릭하고 클릭하면 32 비트 또는 64 비트가 표시됩니다.

훨씬 쉬운 방법을 찾았습니다. 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

이런 식으로 OperatingSystem을 요청할 때 이상한 결과를 얻습니다.여기를보세요. PC3는 내 것입니다.

나는 이것이 너희들에게 효과가 있기를 바랍니다. 코드 부족에 대해 죄송합니다. 내 스크립트는 대부분 기능적입니다.

편집하다: 데이터를 검색 한 후에 엑셀을 닫기 위해 코드를 추가하는 것을 잊지 마십시오.
어제이 코드를 테스트 한 후에는 엑셀이 열리고 갑자기 충돌했습니다.
이렇게하면 사용자와 관리자가 행복하게 유지할 수 있습니다 (:

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

편집 : 레지스트리 키를 건드리지 않고 솔루션 - 죄송합니다.

C#에는 솔루션이 있음을 알았습니다. 원본은 여기에서 찾을 수 있습니다.https://blogs.msdn.microsoft.com/webdav_101/2016/07/26/sample-detecting-stalled-outlook-and-it-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;



    }

설치된 Office 2010 버전이 어떤 비트 번호 만 알고 싶다면, Office 2010의 응용 프로그램에서 파일을 클릭 한 다음 도움을 받으십시오. 버전 번호에 대한 정보가 나열되며 그 옆에는 괄호 안에서 (32 비트) 또는 (64 비트)가됩니다.

Outlook 2013> 파일> 사무실 계정> Outlook 정보> 큰 "클릭"? Outlook "버튼> 팝업 설명 읽기

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top