質問

Office には 64 ビット インストールも含まれていますが、インストールされている Office のバージョンが 32 ビットか 64 ビットかはレジストリのどこで確認できますか?

役に立ちましたか?

解決

TechNet の記事より 64 ビット版の Office 2010:

Microsoft Outlook 2010を含むOffice 2010をインストールした場合、Outlookはレジストリキーという名前を設定します ビットネス タイプの REG_SZ インストールされているコンピュータ上で。の ビットネス レジストリキーは、Outlook 2010のインストールが32ビットか64ビットかを示します。これは、コンピューターの監査に関心のある管理者にとって、組織にオフィス2010のインストールされているバージョンを決定する管理者にとって有用かもしれません。

  • レジストリ パス: HKEY_LOCAL_MACHINE\ソフトウェア\Microsoft\Office\14.0\Outlook
  • Office 2013をインストールした場合は、このレジストリパスを使用してください。 HKEY_LOCAL_MACHINE\ソフトウェア\Microsoft\Office\15.0\Outlook
  • レジストリ キー: ビットネス
  • 価値:x86 または x64 のいずれか

同じ記事の他の場所でも次のようになります。

Office 2010から始めて、Outlookは32ビットアプリケーションと64ビットアプリケーションとして利用できます。選択したOutlookのバージョン(ビットネス)は、Windowsオペレーティングシステム(32ビットまたは64ビット)のエディションと、コンピューターにインストールされているOffice 2010(32または64ビット)のエディションに依存します。オフィスはすでにそのコンピューターにインストールされています。

32ビットまたは64ビットバージョンのOutlookをインストールする可能性を決定する要因には、以下が含まれます。

  • 32 ビット Office 2010 および 32 ビット Microsoft Outlook 2010 は、サポートされている 32 ビットまたは 64 ビット エディションの Windows オペレーティング システムにインストールできます。64 ビット バージョンの Office 2010 および 64 ビット Outlook 2010 は、サポートされている 64 ビット オペレーティング システムにのみインストールできます。
  • 64 ビット版の Windows オペレーティング システム上の Office 2010 の既定のインストールは、32 ビット Office 2010 です。
  • Office が同じコンピューターにインストールされている場合、インストールされているバージョンの Outlook のビット数は常に Office 2010 のビット数と同じになります。つまり、64 ビット版の Outlook 2010 は、64 ビット版の Microsoft Word 2010 や 64 ビット版の Microsoft Excel 2010 など、他の Office 2010 アプリケーションの 64 ビット版が既にインストールされているコンピューターにはインストールできません。同様に、64 ビット バージョンの Outlook 2010 は、32 ビット バージョンの他の Office アプリケーションが既にインストールされているコンピューターにインストールすることはできません。

他のヒント

私はオタクの答えをテストしてみたし、Outlookがインストールされていない場合でも、Outlookのbit化値が明確にこのケースになることを示すものではありません。記事を参照していても、設定されていることが表示されます。

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 }
  { 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の方法は私のために働いていない - どちらも展望bit化も{90140000-0011-0000-の 1000 の-0000000FF1CE}レジストリ内(のために64を持っています展望のないビット版Office)がインストールされています。

私が見つけた唯一の方法は、しかし、レジストリを経由して、Windows API関数を使用してOfficeの実行可能ファイルのいずれかののbitnessをチェックすることではありません<のhref = "http://msdn.microsoft.com/ EN-US /ライブラリ/ aa364819%28V = VS.85%29.aspx」のrel = "noreferrerを"> GetBinaryType にする(Windows 2000 Professionalのため)。

は、たとえば、あなたは
の下に格納されているパスのWinword.exeのbit化を、確認することができます マイクロソフト\ Windowsの\ CurrentVersionの\アプリケーションのパスのHKEY_LOCAL_MACHINE \ SOFTWARE \ \ 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 バイナリ パス (「c:/Program Files (x86)/...」) を使用します。

つまり、「IMAGE_NT_HEADERS.FileHeader.Machine」エントリを使用してバイナリ ファイルを自分でテストする必要がある可能性があります。

いや、私は一部の Windows API の不正な戻り値が大嫌いです (GetVersion() の嘘も参照してください)。

私はオフィスのbitnessをチェックするための方法を見つけます。

私たちは、このレジストリキーを使用してオフィス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 \マイクロソフト\ Officeが存在する場合、Officeの32ビットます。

HKLM \ SOFTWARE \ WOW6432NODE \マイクロソフト\ Officeが存在していませんが、ます。HKLM \ Software \ Microsoft \ Officeが存在しない場合は、Officeが64ビットである。

HKLM \ SOFTWARE \ WOW6432NODEが存在しない場合は、WindowsとOfficeがある32ビットます。

ソース:のTechnetフォーラム

ここで私はOfficeの64ビットのOutlookを検出するために、VBScriptで使用することができたものです。

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

あなたは、{のの-0000000FF1CE 90140000-0011-0000-の の0000}のためにレジストリを検索することができます。太字の数字が0ののx86で起動した場合、1がx64のです。

私にとってはそれがでました マイクロソフト\オフィス\ 14.0 \ {登録90140000-0057-0000-0000-0000000FF1CE}

のHKEY_LOCAL_MACHINE \ SOFTWARE \

<のhref = "https://social.msdn.microsoft.com/Forums/office/en-US/43499ae0-bcb5-4527-8edb-f5a955987b56/how-to-detect-whether-installed-ms-オフィス-2010-IS-32-または-64ビット?フォーラム= worddev」のrel = "nofollowをnoreferrer">

のソース>

このInnoSetupコードが勝つの10x64とOffice 2016のx86の下で私のために働いている(とキー 'プラットフォーム' を使用して 'マイクロソフト\オフィス\ ClickToRun \構成\ HKLM \ソフトウェア')

[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と呼ばれるキーを持っていません。私は、これらのフォルダの両方に「デフォルト」という名前のキーを持っているし、値がマイコンピュータにOffice 2010のスターター(私は64ビットを想定)に付属の「未設定」です。私はそれを削除し、32ビットオフィスのフルインストールを実行しようとしました。私は、次のメッセージが出続けます。ファイルは互換性がありません、あなたがプログラムのx86またはx64バージョンを必要とするかどうかを確認します。

私のために何かアドバイス?

@clatonh:これは私のPCのレジストリのパスです: HKEY_LOCAL_MACHINE \ソフトウェア\マイクロソフト\オフィス\ 14.0 \ {登録90140000-002A-0000-1000-0000000FF1CE} そして、それは間違いなく、64ビットOS上で32ビットのインストールです。

私は以前に盲目的にMSDNドキュメントに基づいて回答を追ってきました。今日、これは必要とされるよりも少ないことが判明しました。見通しが含まれていませんインストールされているOfficeホームと学生を持つマシン上で、HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Office\14.0\Outlookは存在したが、HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\14.0\Outlookませんでした。私は今、最初の「プレーン」非WOW6432NODEバージョンを探すために私のコードを変更しました。なお、本だ場合、それが使用されます。そうでない場合、それはWOW6432NODEバージョンを見ることで継続されます。これは、Inno Setupのベースのインストーラでチェックされている - 私はInno Setupのが使用するAPIのか知りません。あなたのアプリが同じようにレジストリにアクセスしない場合は、異なる結果が表示される場合があります。

私が最初にOutlook用にこれを書きました。 Wordのためにそれを少し変更されたが、それは、スタンドアロンで動作しません。そのキーはbit化を示していないので、唯一の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

私のテストでは、ここで説明したアプローチの多くは失敗しました。これは、Office のバージョンやインストール方法などによっては、Windows レジストリのエントリが確実に存在しないことが判明したことに依存しているためだと思います。したがって、別のアプローチは、レジストリをまったく使用せず (厳密には、提示された質問に対する答えにはなりません)、代わりに次のようなスクリプトを作成することです。

  1. Excelをインスタンス化します
  2. その Excel インスタンスにワークブックを追加します
  3. そのワークブックに VBA モジュールを追加します
  4. Office のビット数を返す小さな 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

PS.このアプローチは他のアプローチよりも実行に時間がかかります (私の PC では約 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, 、64 ビット Windows 上の 32 ビット Excel から呼び出された場合、 Windows (32-bit) NT 10.00 少なくとも私のPCではそうなります。しかし、そのことは本書では言及されていない ドキュメント.

私は7 64ビット+エクセル2010 32ビットを獲得しています。 レジストリには、Microsoft \ Officeの\ 14.0 \ {登録90140000-002A-0000-1000-0000000FF1CE}

のHKEY_LOCAL_MACHINE \ SOFTWARE \です

これはOSのbit化を伝えることができるので、オフィスでのbitnessません。

私は、特定のアプリケーションがWin32 API関数を使用することによって、32ビットまたは64ビット(私の場合、私はExcelをテストするために必要な)であるかどうかを理解するために私InnoSetupベースのスクリプトで、安全で信頼性の高い方法を見つけました。この機能は、それが `kernel32' のから来ている(名前にもかかわらず、それは32ビットおよび64ビットの味に来る)とexeファイルのヘッダに直接見え、GetBinaryType()と呼ばれます。

状態のこのウィキペディアの記事:

  

Windowsの64ビットバージョンでは、アプリケーションファイルの2つのフォルダがあります。 "Program Files"フォルダは、64ビットのプログラムを含み、"Program Files (x86)"フォルダは32ビットプログラムが含まれています。

プログラムはC:\Program Filesの下にインストールされている場合は、

だから、64ビットバージョンです。それはC:\Program Files (x86)の下にインストールされている場合、それは32ビットインストールされます。

オフィスのbit化を検出するもうひとつの方法は、タイプライブラリを見つけることです。

たとえば、次のように.jsファイルを作成し、Outlookのbit化を検出するために、

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";
}

あなたは他のOfficeコンポーネントのタイプライブラリ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であり、深くシステムに統合、彼らも、サンドボックス環境にアクセスできませんでした可能性はほとんどありません。

WELL

注:の上記detectVersion機能は、の動作しません。私はオフィスの64ビットバージョン、及びこの関数の戻り値を使用して32の両方のバージョンと別個いずれかが「32ビット」。

手動でレジストリをチェックすると、同じ結論につながる:両方の64および32ビット(のOffice 2010のx64およびOffice 2013 32ビット)は、32ビットを報告

個人的に私は、Officeチームは、単に書き、どこかのレジストリキーを得ることが容易に維持すべきだと思います。このすべてを参照するのニーズインを追加し、現在は「推測する」を使用するように強制する開発者のための貧弱なアプローチです。

あなたはスクリプトにそれを必要としません。

:私は全体つまずいこのページを見てください

<のhref = "https://social.msdn.microsoft.com/Forums/office/en-US/43499ae0-bcb5-4527-8edb-f5a955987b56/how-to-detect-whether-installed-ms-オフィス-2010-IS-32-または-64ビット?フォーラム= worddev」relが= "nofollowを"> https://social.msdn.microsoft.com/Forums/office/en-US/43499ae0-bcb5-4527- 8edb-f5a955987b56 /方法ツー検出インストールするかどうかを-MSオフィス-2010-IS-32または64ビット?フォーラム= worddev の

要約すると:

製品コードにおける4番目のフィールドは、製品のbitnessを示します。

{BRMMmmmm-PPPP-LLLL-の P の000-D000000FF1CE} P000

のx64 0-1用のx86、1 0

(これものMSOffice 2013当てはまります)

例えば、あなたが興味を持っているOfficeコンポーネントのインストールパスのレジストリを検索マイクロソフト\オフィス\ 14.0 \ Excelの\ INSTALLROOT \ SOFTWARE(WOW6432NODE)でExcel 2010の外観のために。それだけであろういずれかの32ビット・レジストリまたは64ビットレジストリの両方ではない。

見通しのbitnessのレジストリキーは、私のマシン上に存在しません。

見通しのbitnessを決定する1つの方法は、Outlook.exeのを調べることによって、それ自体であり、それは32ビットまたは64ビットであるかどうかを判断します。

具体的には、[IMAGE_FILE_HEADER.Machine] [1]入力チェックすることができ、これは、プロセッサの種類を示す値が返されます。

この議論の優れた背景については、ファイルのPEヘッダーを読むことは、この(古いリンク)する;

IMAGE_NT_HEADERS構造は、PEファイルの内容が格納されるプライマリロケーションです。そのオフセットは、ファイルの先頭にIMAGE_DOS_HEADERにe_lfanewフィールドで与えられます。 IMAGE_NT_HEADER構造の2つのバージョン、64ビットバージョンの32ビットの実行可能ファイルのための1つの他方が実際存在します。違いは、私は彼らがこの議論の目的のために同じであると考えますように軽微なものです。二つのフォーマットを区別するだけ正しい、マイクロソフト承認方法は、(簡単に説明)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#のコード<のhref = "http://metadataconsulting.blogspot.ca/2014/06/determining-if-app-executable-is-32-bit.html" のrel = "nofollowを" を得ることができます>ここを。

マジックフィールドはIMAGE_OPTIONAL_HEADER構造の開始時である、で2つのバイトが_IMAGE_NT_HEADERSの開始から24をオフセット。これは、64ビット、32ビットおよび0x20Bため0x10Bの値を持つ。

未レジストリ経由ではなくコマンドラインツールを経由してます:

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

C:\ユーザーは、私を\>連想.msgの

.MSG = Outlook.File.msg.15

C:\ユーザーは、私を\> FTYPE Outlook.File.msg.15

Outlook.File.msg.15 = "C:\プログラムファイル(x86ののの)\ Microsoft Officeの\ルート\ Office16 \ OUTLOOK.EXE" / F "%1"

ベスト簡単な方法:あなたのオフィス2016のアプリケーションにABOUTアイコンを置きます。例エクセル

1)Excelを起動 - > [ファイル] - > [オプション] - > [リボンのユーザー

2)あなたは「2つのペインを参照してくださいでしょう。コマンドを選択してください&リボンをカスタマイズ

3)から、すべてのコマンドを選択し、コマンドを選択してください。

4)について結果のリストのハイライトから(エクセル)

5)カスタマイズザ・リボンの痛みから、任意の項目アイコンについて載せていきたいと思います(例:ビュー)をハイライト表示し、

6)下部にある[新規グループ]をクリックします。

7)2つのペインの間に位置し、[追加]ボタンをクリックします。 DONE

これは、Excelで表示]タブをクリックし、表示されますあなたについてクリックすると、32ビットまたは64ビット

私はもっと簡単な方法を見つけました。 PowerShellを使用して、我々は、COMオブジェクトとしてExcelをフックすることができます。

$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は私のものです。

私はこれがあなたたちのために働く願っています。コードの不足のため申し訳ありません。私のスクリプトは、ほとんど機能しています。

の編集の: あなたがデータを取得し終わった後、Excelを閉じるためのコードを追加することを忘れないでください。
昨日、このコードをテストした後、私はExcelの開口部のトンを持っていたし、突然クラッシュ..
これは、ユーザーや管理者をしておこうことを確認します幸せ(ます:

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

EDIT:。RegistryKeysに触れることなくソリューション - イム申し訳オペアンプ

私はC#でのソリューションがあることが判明 - 元はここで見つけることができます: ます。https:/ /blogs.msdn.microsoft.com/webdav_101/2016/07/26/sample-detecting-installed-outlook-and-its-bitness/する

私は私のニーズのためにそれを少し変更します。

ちょうどGetOutlookBitnessに正しいoutlookPathを渡す()

  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;



    }

1には、Office 2010のインストールされたバージョン番号をビットだけ何を知りたい場合は、ヘルプに、ファイル上だけをクリックし、Office 2010の任意のアプリケーションで、あります。バージョン番号に関する情報が表示されます、そしてそれに続いて、括弧内に、いずれかの(32ビット)または(64ビット)になります。

見通しについて

Outlookを開き2013>ファイル>オフィスアカウント>>大]をクリックし、 "?展望について" ボタン>

ポップアップの説明を読んで
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top