Officeも64ビットインストールになっていますが、インストールされているOfficeのバージョンが32ビットか64ビットかはレジストリのどこで確認できますか?
Office 2010の 64ビット版に関するTechNet記事から :
Microsoft Outlook 2010を含むOffice 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ビットオペレーティングシステムにのみインストールできます。
- Windowsオペレーティングシステムの64ビットエディションでのOffice 2010のデフォルトのインストールは、32ビットOffice 2010です。
- Officeが同じコンピューターにインストールされている場合、インストールされたバージョンのOutlookのビット数は常にOffice 2010のビット数と同じです。つまり、32ビットバージョンのOutlook 2010は、64ビットバージョンの他のOffice 2010アプリケーションが既にインストールされているコンピューター(64ビットMicrosoft Word 2010または64ビットMicrosoft Excel 2010など)にインストールできません。 、32ビットバージョンの他のOfficeアプリケーションが既にインストールされているコンピューターに、64ビットバージョンのOutlook 2010をインストールすることはできません。
私はオタクの答えをテストしましたが、参照されている記事ではそうではないことが明確に示されていなくても、OutlookがインストールされていなくてもOutlookのビット値が設定されているようです。
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'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の両方のメソッドは機能しません。OutlookBitnessも{90140000-0011-0000-1000-もありません。レジストリに0000000FF1CE}(Outlookがインストールされていない64ビットOfficeの場合)。
ただし、レジストリ経由ではなく、私が見つけた唯一の方法は、Windows API関数 GetBinaryType (Windows 2000 Professional以降)を使用して、Office実行可能ファイルのビット数をチェックすることです。
たとえば、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
}
オフィスの切れ味をチェックする方法を見つけました。
次のレジストリキーを使用して、Office 365および2016のビット数を確認できます。
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\ClickToRun\Configuration
32ビットのプラットフォームx86。
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\ClickToRun\Configuration
64ビットのプラットフォームx64。
チェックしてください...
注意:Outlookアプリケーションのビット数のクエリ確実に動作しません .NET環境で呼び出された場合。
ここでは、DLLでGetBinaryType()を使用します。これは、任意のアプリケーションから呼び出すことができます。
同じコンピューター上で、まったく同じDLLコードとまったく同じOutlookバイナリパス( "c:/ Program Files(x86)/ ...")を使用します。
「IMAGE_NT_HEADERS.FileHeader.Machine」エントリを使用して自分でバイナリファイルをテストする必要があるかもしれないことを意味します。
神、私はいくつかのWindows APIの不正な戻り値を嫌います(GetVersion()の嘘も参照)。
私はこのアプローチを見つけました:
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 Forums
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
この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;
レジストリで{90140000-0011-0000-0000-0000000FF1CE}を検索できます。太字の数字が0で始まるx86の場合、1はx64です
私にとっては、HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\14.0\Registration {90140000-0057-0000-0000-0000000FF1CE}にありました
これらのフォルダのいずれにもビットネスと呼ばれるキーがありません。これらのフォルダーの両方に「default」というキーがあり、値は「unset」です。コンピューターにはoffice 2010スターターが付属しています(64ビットと想定)。私はそれを削除し、32ビットオフィスのフルインストールを試みました。次のメッセージが引き続き表示されます。ファイルに互換性がない場合は、x86またはx64バージョンのプログラムが必要かどうかを確認してください。
私へのアドバイスは?
私のテストでは、ここで説明したアプローチの多くは失敗します。Officeのバージョン、インストール方法などに応じて、Windowsレジストリのエントリが信頼できないことがわかっているためです。レジストリ(まったく厳密に言えば、提示された質問に対する答えではありません)の代わりに、次のようなスクリプトを作成します。
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で返すという事実に依存しています。しかし、それは docs では言及されていません。
@clatonh:これは私のPCのレジストリのパス:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\14.0\Registration {90140000-002A-0000-1000-0000000FF1CE}であり、64ビットでの32ビットインストールです。 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
ではなかった。コードを変更して、「プレーン」非Wow6432Nodeバージョンを最初に探すようにしました。それが存在する場合、それが使用されます。そうでない場合は、Wow6432Nodeバージョンを調べて続行します。これは、Inno Setupベースのインストーラーで確認されています-Inno Setupが使用するAPIがわかりません。アプリが同じ方法でレジストリにアクセスしない場合、異なる結果が表示される場合があります。
私は最初に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
編集:RegistryKeysに触れずに解決策-申し訳ありませんがオペアンプ.
私はC#に解決策があることを発見しました-オリジナルはここにあります: https://blogs.msdn.Microsoft.com/webdav_101/2016/07/26/sample-detecting-installed-Outlook- and-its-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;
}
もっと簡単な方法を見つけました。 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は私のものです
これが皆さんの役に立つことを願っています。コードが不足してすみません。私のスクリプトはほとんど機能しています。
Edit:データの取得が完了した後、Excelを閉じるコードを追加することを忘れないでください。
昨日このコードをテストした後、大量のExcelが突然開いてクラッシュしました。
これにより、ユーザーと管理者を満足させることができます(:
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($msoExcel)
Remove-Variable msoExcel
このウィキペディアの記事 状態:
64ビットバージョンのWindowsには、アプリケーションファイル用の2つのフォルダーがあります。 _
"Program Files"
_フォルダーには64ビットプログラムが含まれ、"Program Files (x86)"
フォルダーには32ビットプログラムが含まれます。
したがって、プログラムが_C:\Program Files
_の下にインストールされている場合、それは64ビットバージョンです。 C:\Program Files (x86)
の下にインストールされている場合、32ビットのインストールです。
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コンポーネントの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にあり、システムに深く統合されているため、サンドボックス環境でもアクセスできない可能性は非常に低いです。
InnoSetupベースのスクリプトで、Win32 API関数を使用して、特定のアプリケーションが32ビットか64ビットか(私の場合はExcelをテストする必要があったかどうか)を理解するための安全で信頼できる方法を見つけました。この関数はGetBinaryType()
と呼ばれ、(kernel32 'から(名前にかかわらず32ビットおよび64ビットのフレーバーで)実行され、exeのヘッダーを直接調べます。
注:上記のdetectVersion関数動作しません。 64ビットバージョンのOfficeと、32ビットの別のバージョンがあります。この関数を使用するバージョンは両方とも「32ビット」を返します。
レジストリを手動でチェックすると、64ビットと32ビット(Office 2010 x64およびOffice 2013 32ビット)の両方が32ビットを報告するという同じ結論に至ります。
個人的には、Officeチームは簡単に入手できるレジストリキーをどこかに書いて維持すべきだと思います。すべてのアドインはこれを参照する必要があり、現在「推測」は開発者が使用を余儀なくされる貧弱なアプローチです。
スクリプトを作成する必要はありません。私が偶然見つけたこのページを見てください:
要約する:
製品コードの4番目のフィールドは、製品のビット数を示します。
{BRMMmmmm-PPPP-LLLL-p000-D000000FF1CE} p000
x86の場合は0、x64 0-1の場合は1(これはMSOffice 2013にも当てはまります)
レジストリ経由ではなく、コマンドラインツール経由:
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 "
最も簡単な方法:Office 2016アプリケーションにABOUTアイコンを配置します。 Excelの例
1)Excel->ファイル->オプション->リボンのカスタマイズを開きます
2)2つのペインが表示されます。リボンからコマンドを選択してリボンをカスタマイズ
3)コマンドの選択から、すべてのコマンドを選択
4)結果のリストのハイライトについて(Excel)
5)[リボンの痛みのカスタマイズ]から、[バージョン情報]アイコンを配置するアイテム(例:ビュー)を強調表示します
6)下部にある[新しいグループ]をクリックします
7)2つのペインの間にある追加ボタンをクリックします。完了
Excelの[表示]タブをクリックして[約]をクリックすると、32ビットまたは64ビットが表示されます。
7 64ビット+ Excel 2010 32ビットを獲得しています。レジストリはHKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\14.0\Registration {90140000-002A-0000-1000-0000000FF1CE}です。
これにより、Officeのビットネスではなく、OSのビットネスがわかります。
Outlook Bitnessレジストリキーがマシンに存在しません。
Outlookのビット数を判断する1つの方法は、Outlook.exe自体を調べて、32ビットか64ビットかを判断することです。
具体的には、[IMAGE_FILE_HEADER.Machine] [1]タイプを確認すると、プロセッサータイプを示す値が返されます。
この議論の優れた背景として、ファイルのPEヘッダーの読み取りについて this(outdated link)
IMAGE_NT_HEADERS構造は、PEファイルの詳細が保存される主要な場所です。そのオフセットは、ファイルの先頭にあるIMAGE_DOS_HEADERのe_lfanewフィールドによって指定されます。 IMAGE_NT_HEADER構造には、実際には2つのバージョンがあります。1つは32ビット実行可能ファイル用で、もう1つは64ビットバージョン用です。この違いは非常に小さいため、この説明の目的上、それらは同じであると考えます。 Microsoftが承認した2つの形式を区別する唯一の正しい方法は、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#コードを取得できます here 。
MagicフィールドはIMAGE_OPTIONAL_HEADER構造体の先頭にあり、_IMAGE_NT_HEADERSの先頭からのオフセット24に2バイトあります。 32ビットの場合は0x10B、64ビットの場合は0x20Bの値があります。
興味のあるオフィスコンポーネントのインストールパスをレジストリで検索します。 Excel 2010の場合は、SOFTWARE(Wow6432Node)\ Microsoft\Office\14.0\Excel\InstallRootを参照してください。 32ビットレジストリまたは64ビットレジストリのどちらかにのみ存在し、両方には存在しません。