52

Officeも64ビットインストールで提供されるようになりましたが、レジストリのどこで、インストールされているOfficeのバージョンが32ビットか64ビットかを確認できますか?

4

28 に答える 28

53

Office 2010の64ビット版に関するTechNetの記事から:

Microsoft Outlook2010を含むOffice2010をインストールした場合、Outlookは、 インストールされているコンピューターにタイプREG_SZのBitnessという名前のレジストリキーを設定します。Bitnessレジストリキーは、 Outlook2010のインストールが32ビットか64ビットかを示します。これは、コンピューターの監査に関心のある管理者が、組織にインストールされているOffice2010のバージョンを確認するのに役立つ場合があります。

  • レジストリパス: 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が既にインストールされています。

Outlookの32ビットまたは64ビットバージョンのインストールの実現可能性を決定する要因には、次のものがあります。

  • サポートされている32ビット版または64ビット版のWindowsオペレーティングシステムに、32ビットのOffice2010および32ビットのMicrosoftOutlook2010をインストールできます。64ビットバージョンのOffice2010および64ビットOutlook2010は、サポートされている64ビットオペレーティングシステムにのみインストールできます。
  • 64ビット版のWindowsオペレーティングシステムへのOffice2010の既定のインストールは、32ビットのOffice2010です。
  • インストールされているバージョンのOutlookのビット数は、Officeが同じコンピューターにインストールされている場合、常にOffice2010のビット数と同じです。つまり、32ビットバージョンのOutlook 2010は、64ビットMicrosoftWord2010や64ビットMicrosoftExcel2010などの他のOffice2010アプリケーションの64ビットバージョンが既にインストールされている同じコンピューターにインストールすることはできません。 、64ビットバージョンのOutlook 2010は、他のOfficeアプリケーションの32ビットバージョンが既にインストールされているのと同じコンピューターにインストールすることはできません。
于 2010-02-06T04:48:07.343 に答える
23

オタクの答えをテストしましたが、参照されている記事ではそうなることが明確に示されていませんが、Outlookがインストールされていない場合でもOutlookのビット数の値が設定されているようです。

于 2010-05-25T21:11:42.630 に答える
12

vtrzの答えに追加するために、InnoSetup用に作成した関数を次に示します。

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;
于 2012-07-25T14:02:10.750 に答える
9

残念ながら、Otackuと@clatonhの両方の方法が機能していません。レジストリにOutlookBitnessも{90140000-0011-0000-1000 -0000000FF1CE }もありません(Outlookがインストールされていない64ビットOfficeの場合)。

ただし、レジストリを介さずに私が見つけた唯一の方法は、Windows API関数GetBinaryType(Windows 2000 Professional以降)を使用して、Office実行可能ファイルの1つのビット数をチェックすることです。

たとえば、Winword.exeのビット数を確認できます。このパスは、
HKEY_LOCAL_MACHINE \ SOFTWARE \ 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
}
于 2011-04-27T14:56:09.863 に答える
7

オフィスのビットネスをチェックする方法を見つけました。

次のレジストリキーを使用して、Office365と2016のビット数を確認できます。

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\ClickToRun\Configuration

32ビット用のプラットフォームx86。

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\ClickToRun\Configuration

64ビット用のプラットフォームx64。

チェックしてください...

于 2017-04-24T04:37:51.553 に答える
5

重要: .NET環境で呼び出された場合、Outlookアプリケーションのビット数のクエリは確実に機能しません。

ここでは、任意のアプリケーションから呼び出すことができる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()lieも参照してください)。

于 2014-03-26T08:17:23.823 に答える
3

私はこのアプローチを見つけました:

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フォーラム

于 2012-04-04T18:33:43.503 に答える
2

レジストリで{90140000-0011-0000-0000-0000000FF1CE}を検索できます。太字の数字が0で始まる場合はx86、1はx64です

私にとっては、HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Office \ 14.0 \Registration{90140000-0057-0000-0000-0000000FF1CE}にありました。

ソース

于 2010-08-10T19:23:53.407 に答える
2

これが、Office64ビット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
于 2015-02-26T22:46:14.840 に答える
2

このInnoSetupコードは、Win10x64およびOffice2016 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;
于 2016-04-14T19:23:45.523 に答える
2

編集:RegistryKeysに触れない解決策-申し訳ありませんがOp。

C#に解決策があることがわかりました-元の解決策はここにあります: 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;



    }
于 2019-04-29T16:12:38.503 に答える
1

これらのフォルダのどちらにもbitnessというキーはありません。これらのフォルダーの両方に「default」というキーがあり、値は「unset」です。コンピューターにはOffice 2010スターターが付属しています(64ビットを想定しています)。私はそれを削除し、32ビットオフィスのフルインストールを試みました。次のメッセージが表示され続けます。ファイルに互換性がない場合は、プログラムのx86バージョンまたはx64バージョンが必要かどうかを確認してください。

何かアドバイスはありますか?

于 2010-08-05T15:04:37.327 に答える
1

@clatonh:これは私のPC上のレジストリのパスです:HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Office \ 14.0 \ Registration{90140000-002A-0000-1000-0000000FF1CE}そしてそれは間違いなく32ビットです-64ビットへのインストールOS。

于 2010-08-16T11:47:47.253 に答える
1

私は以前、MSDNのドキュメントに基づいて盲目的に答えをたどってきました。今日、これは必要とされるよりも少ないことが判明しました。Outlookを含まないOfficeHomeとStudentがインストールされているマシンにHKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Office\14.0\Outlookは存在していましたが、存在していませんHKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\14.0\Outlookでした。コードを変更して、最初に「プレーンな」非Wow6432Nodeバージョンを検索しました。それが存在する場合は、それが使用されます。そうでない場合は、Wow6432Nodeバージョンを確認して続行します。これは、InnoSetupベースのインストーラーでチェックされています-InnoSetupが使用するAPIがわかりません。アプリが同じ方法でレジストリにアクセスしない場合、異なる結果が表示される可能性があります。

于 2011-09-27T20:31:45.130 に答える
1

レジストリで、関心のあるOfficeコンポーネントのインストールパスを検索します。たとえば、Excel 2010の場合は、SOFTWARE(Wow6432Node)\ Microsoft \ Office \ 14.0 \ Excel\InstallRootを検索します。32ビットレジストリまたは64ビットレジストリのいずれかにのみ存在し、両方には存在しません。

于 2015-04-15T14:16:31.877 に答える
1

レジストリ経由ではなく、コマンドラインツール経由:

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

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"

于 2016-08-11T13:20:03.097 に答える
1

私は最初に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
于 2018-03-19T18:01:26.817 に答える
1

私のテストでは、ここで説明するアプローチの多くは失敗します。これは、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では返されるという事実に依存しています。しかし、それはドキュメントには記載されていません。

于 2019-01-25T14:05:38.040 に答える
0

私は764ビット+Excel201032ビットを獲得しました。レジストリはHKEY_LOCAL_MACHINE\SOFTWARE \ Microsoft \ Office \ 14.0 \Registration{90140000-002A-0000-1000-0000000FF1CE}です。

つまり、これはOfficeのビット数ではなく、OSのビット数を示すことができます

于 2011-09-21T18:12:42.613 に答える
0

このウィキペディアの記事は次のように述べています。

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

したがって、プログラムがその下にインストールされC:\Program Filesている場合は、64ビットバージョンです。その下にインストールされC:\Program Files (x86)ている場合は、32ビットインストールです。

于 2012-03-20T18:16:37.603 に答える
0

Win32 API関数を使用して、特定のアプリケーションが32ビットか64ビットか(私の場合はExcelをテストする必要があります)を理解するための安全で信頼性の高い方法をInnoSetupベースのスクリプトで見つけました。この関数はと呼ばれGetBinaryType()、 `kernel32'に由来し(名前は32ビットと64ビットのフレーバーで提供されます)、exeのヘッダーを直接調べます。

于 2012-06-14T13:08:53.770 に答える
0

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

他のOfficeコンポーネントのtypelibidを見つけて、その関数の最初の行を置き換えることができます。興味深い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

上記のすべてのlibidは、Windows SDKツールを介してOLE-COM Object Viewer検出されました。これを使用すると、より多くのlibidを検出できます。

このアプローチの利点は、Officeのすべてのバージョンで機能し、関心のあるすべてのコンポーネントを制御できることです。さらに、これらのキーはHKEY_CLASSES_ROOTにあり、システムに深く統合されているため、サンドボックス環境でもアクセスできなかった可能性はほとんどありません。

于 2013-04-24T00:26:59.123 に答える
0

OutlookBitnessレジストリキーが私のマシンに存在しません。

Outlookのビット数を判断する1つの方法は、Outlook.exe自体を調べて、それが32ビットか64ビットかを判断することです。

具体的には、[IMAGE_FILE_HEADER.Machine] [1]タイプを確認すると、プロセッサタイプを示す値が返されます。

この議論の優れた背景については、ファイルのPEヘッダーを読み取る際に、これ(古いリンク)を読んでください。

IMAGE_NT_HEADERS構造体は、PEファイルの詳細が保存される主要な場所です。そのオフセットは、ファイルの先頭にあるIMAGE_DOS_HEADERのe_lfanewフィールドによって指定されます。IMAGE_NT_HEADER構造には、実際には2つのバージョンがあります。1つは32ビットの実行可能ファイル用で、もう1つは64ビットバージョン用です。違いは非常に小さいので、この説明では同じであると見なします。2つの形式を区別するための、Microsoftが承認した唯一の正しい方法は、IMAGE_OPTIONAL_HEADER(簡単に説明)のMagicフィールドの値を使用することです。

IMAGE_NT_HEADERは、次の3つのフィールドで構成されています。

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

ここでc#コードを取得できます。

マジックフィールドは、IMAGE_OPTIONAL_HEADER構造体の先頭にあり、_IMAGE_NT_HEADERSの先頭からオフセット24に2バイトあります。32ビットの場合は0x10B、64ビットの場合は0x20Bの値があります。

于 2014-06-24T14:55:19.287 に答える
0

スクリプトを作成する必要はありません。私が偶然見つけたこのページを見てください:

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

要約する:

製品コードの4番目のフィールドは、製品のビット数を示します。

{BRMMmmmm-PPPP-LLLL- p 000-D000000FF1CE} p000

x86の場合は0、x64 0-1の場合は1(これはMSOffice 2013にも当てはまります)

于 2015-03-02T12:33:01.757 に答える
0

最も簡単な方法:Office2016アプリケーションにABOUTアイコンを配置します。Excelの例

1)[Excel]->[ファイル]->[オプション]->[リボンのカスタマイズ]を開きます

2)2つのペインが表示されます。コマンドの選択とリボンのカスタマイズ

3)[コマンドの選択]から、[すべてのコマンド]を選択します

4)結果のリストからハイライトについて(Excel)

5)[リボンの痛みのカスタマイズ]から、[バージョン情報]アイコンを配置するアイテム(例:表示)を強調表示します

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

7)2つのペインの間にある追加ボタンをクリックします。終わり

これで、Excelで[表示]タブをクリックして[約]をクリックすると、32ビットまたは64ビットが表示されます。

于 2017-01-27T18:33:26.873 に答える
0

私ははるかに簡単な方法を見つけました。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
于 2017-08-15T08:29:52.863 に答える
-5

インストールされているOffice2010のビット番号だけを知りたい場合は、Office 2010のどのアプリケーションでも、[ファイル]、[ヘルプ]の順にクリックします。バージョン番号に関する情報が一覧表示され、その横の括弧内は(32ビット)または(64ビット)のいずれかになります。

于 2012-07-29T05:22:49.773 に答える
-6

Outlook2013を開く>ファイル>Officeアカウント>Outlookについて>大きな[?Outlookについて]ボタンをクリック>ポップアップの説明を読む

于 2014-02-01T02:45:55.827 に答える