Rileva se Office è a 32 bit o 64 bit tramite il registro
-
18-09-2019 - |
Domanda
Ora che Office è disponibile anche con installazione a 64 bit, dove trovi nel registro se la versione di Office installata è a 32 bit o 64 bit?
Soluzione
Da articolo di TechNet su edizioni a 64 bit di Office 2010 :
Se si è installato Office 2010 tra cui Microsoft Outlook 2010, Outlook imposta una chiave di registro di nome bitness di tipo REG_SZ sul computer su cui è installato. Il bitness chiave di registro indica se l'installazione di Outlook 2010 è 32 bit o 64 bit. Può essere utile per gli amministratori che sono interessati a computer di controllo a determinare le versioni installate di Office 2010 nella loro organizzazione.
percorso
- Registro: HKEY_LOCAL_MACHINE \ Software \ Microsoft \ Office \ 14.0 \ Outlook
- se è stato installato Office 2013 quindi utilizzare questo percorso del Registro di sistema: HKEY_LOCAL_MACHINE \ Software \ Microsoft \ Office \ 15.0 \ Outlook
tasto- Registro: bitness
- Valore: x86 o x64
e altrove nello stesso articolo:
A partire da Office 2010, Outlook è disponibile come un'applicazione a 32 bit e un'applicazione a 64 bit. La versione (Numero di bit) di Outlook che si sceglie dipende l'edizione di Windows sistema operativo (32 bit o 64 bit) e l'edizione di Office 2010 (a 32 o 64-bit) che è installato sul computer, se Office è già installato su quel computer.
I fattori che determinano la fattibilità di installazione a 32 bit o 64 bit versione di Outlook include il seguenti:
- È possibile installare a 32 bit di Office 2010 e 32-bit di Microsoft Outlook 2010 in un'edizione supportato a 32-bit o 64-bit del sistema operativo Windows. È possibile installare la versione a 64 bit di Office 2010 e 64 bit di Outlook 2010 solo su un sistema operativo a 64 bit supportato.
- L'installazione di default di Office 2010 su una versione a 64 bit del sistema operativo Windows è a 32 bit di Office 2010.
- Il numero di bit di una versione installata di Outlook è sempre lo stesso del numero di bit di Office 2010, se Office è installato sullo stesso computer. Cioè, una versione a 32 bit di Outlook 2010 non può essere installato sullo stesso computer su cui le applicazioni 2010 sono già installate versioni a 64 bit di altri Office, ad esempio a 64 bit di Microsoft Word 2010 o 64 bit di Microsoft Excel 2010. Allo stesso modo , una versione a 64 bit di Outlook 2010 non può essere installato sullo stesso computer su cui sono già installati versioni a 32 bit di altre applicazioni di Office.
Altri suggerimenti
Ho testato la risposta di Otaku e sembra che il valore bitness Outlook è impostato anche quando non è installato Outlook, anche se l'articolo citato non lo fa chiaramente indicano che questo sarebbe il caso.
Per aggiungere alla risposta di vtrz, ecco una funzione che ho scritto per 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;
duole dirlo, ma entrambi i metodi di @ clatonh di Otacku e non stanno lavorando per me - non hanno né Outlook bitness né {90140000-0011-0000- 1000 } -0000000FF1CE nel registro (per 64- Ufficio bit senza Outlook installato).
L'unico modo che ho trovato, però, non tramite il Registro di sistema, è quello di verificare bitness per uno dei file eseguibili di Office con l'uso della funzione API di Windows GetBinaryType (a partire da Windows 2000 Professional).
Per esempio, è possibile verificare il numero di bit di Winword.exe, quale percorso è memorizzato sotto
HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ App Paths \ Winword.exe.
Ecco il codice MFC frammento:
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
}
Attenzione:. Interrogando il numero di bit della applicazione Outlook non funziona correttamente se chiamati in ambiente .NET
Qui, usiamo GetBinaryType () in una DLL che può essere chiamato da qualsiasi applicazione:
- Se l'applicazione host è a 64 bit C / C ++, GetBinaryType () restituisce SCS_32BIT_BINARY.
- Se l'applicazione host è a 64 bit NET (abbiamo testato "AnyCPU" su un sistema a 64 bit), GetBinaryType () restituisce SCS_64BIT_BINARY.
Con esattamente lo stesso codice DLL ed esattamente lo stesso percorso binario Outlook. ( "C: / Program Files (x86) / ...") sullo stesso computer
Il che significa che potrebbe essere necessario per testare il file binario da soli, usando la voce "IMAGE_NT_HEADERS.FileHeader.Machine".
Dio, odio i valori di ritorno non corretti di alcune API di Windows (vedi anche GetVersion () si trovano).
ho trovato il modo per controllare l'ufficio bitness.
Possiamo controllare l'ufficio 365 e il 2016 bitness usando questa chiave di registro:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\ClickToRun\Configuration
per piattaforma x86 per 32 bit.
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\ClickToRun\Configuration
x64 Platform for 64 bit.
Si prega di verificare ...
Ho trovato questo approccio:
Se HKLM \ Software \ WOW6432Node esiste quindi Windows è a 64 bit.
Se HKLM \ Software \ WOW6432Node \ Microsoft \ Office esiste, allora Ufficio è a 32 bit.
Se HKLM \ Software \ WOW6432Node \ Microsoft \ Office non esiste, ma HKLM \ Software \ Microsoft \ Office esiste, allora Ufficio è a 64 bit.
Se HKLM \ Software \ WOW6432Node non esiste, quindi Windows e Office sono a 32-bit.
Fonte: Technet Forum
Ecco quello che ero in grado di utilizzare in un VBscript per rilevare Ufficio 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
È possibile cercare il Registro di sistema per {90140000-0011-0000- 0000 -0000000FF1CE}. Se i numeri in grassetto iniziano con 0 la sua x86, x64 1 è
Per me è stato in HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Office \ 14.0 \ Registration {90140000-0057-0000-0000-0000000FF1CE}
Questo codice InnoSetup sta lavorando per me sotto Win 10x64 e Office 2016 x86 (usando '\ SOFTWARE HKLM \ Microsoft \ Office \ ClickToRun \ Configuration' e il tasto '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;
Non ho una chiave denominata bitness in una di queste cartelle. Io ho una chiave denominata "default" in entrambe queste cartelle e il valore è "impostata" Il mio computer è venuto con Office 2010 Starter (presumo a 64 bit). Ho rimosso e ho cercato di fare un'installazione completa di 32 uffici bit. Continuo a ricevere il seguente messaggio. il file non è compatibile, controllare per vedere se è necessario x86 o x64 versione del programma.
qualche consiglio da darmi?
@clatonh: questo è il percorso del Registro di sistema sul mio PC: HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Office \ 14.0 \ Registration {90140000-002A-0000-1000-0000000FF1CE} ed è sicuramente un 32 bit-installazione su un sistema operativo a 64 bit.
Ho già ciecamente seguito la risposta in base alle documentazione MSDN. Oggi, questo si è rivelato essere meno di quanto richiesto. Su una macchina con Office Home e Student installato, che non include Outlook, HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Office\14.0\Outlook
era presente, ma non era HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\14.0\Outlook
. Ora ho cambiato il mio codice per cercare prima per la versione "normale" non Wow6432Node. Se questo è presente, verrà utilizzato. In caso contrario, continuerà, cercando in versione Wow6432Node. Questo viene controllato in un programma di installazione basato su Inno Setup - Non so che le API usi Setup Inno. Se la vostra applicazione non accede il Registro di sistema allo stesso modo, si potrebbe vedere risultati diversi.
Ho scritto questo per Outlook in un primo momento. Modificato un po 'per la parola, ma non funziona su un autonomo installare in quanto tale chiave non mostra il numero di bit, solo Outlook fa.
Inoltre, ho scritto per supportare solo le attuali versioni di Office, => 2010
ho messo a nudo tutta la messa a punto e post elaborazione ...
: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
Nel mio test molti gli approcci descritti qui riesco, credo perché si basano su voci nel registro di Windows, che risultano essere non in modo affidabile presenti, a seconda della versione di Office, come è stato installato ecc Quindi un approccio diverso è di non utilizzare il registro di sistema a tutti (Ok, così strettamente che non lo rende una risposta alla domanda di posta), ma invece scrivere uno script che:
- Crea un'istanza di Excel
- Aggiunge una cartella di lavoro a tale istanza di Excel
- Aggiunge un modulo VBA a quella cartella di lavoro
- inietta una piccola funzione VBA che restituisce il numero di bit di Office
- Chiamate che la funzione
- Pulisce
Ecco che l'approccio implementato in 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. Questo approccio funziona più lentamente di altri qui (circa 2 secondi sul mio PC), ma potrebbe rivelarsi più affidabili tra le diverse installazioni e le versioni di Office.
Dopo alcuni mesi, mi sono reso conto ci può essere un approccio più semplice, anche se ancora uno che crea un'istanza di un'istanza di Excel. Il 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
Questo si basa sul fatto che Application.OperatingSystem
, quando viene chiamato da 32 bit di Excel a 64 bit Windows restituisce Windows (32-bit) NT 10.00
o almeno lo fa sul mio PC. Ma questo non è menzionato nella docs .
Non ho vincere 7 a 64 bit + Excel 2010 a 32 bit. Il registro è HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Office \ 14.0 \ Registration {90140000-002A-0000-1000-0000000FF1CE}
Quindi questo può dire bitness del sistema operativo, non bitness di Office
Ho trovato un modo sicuro e affidabile nel mio script InnoSetup-based per capire se una particolare applicazione è a 32-bit o 64-bit (nel mio caso avevo bisogno di testare Excel), utilizzando una funzione API Win32. Questa funzione è chiamata GetBinaryType()
, viene da `kernel32' (nonostante il nome si tratta di sapore 32 e 64 bit) e guarda direttamente nell'intestazione del exe.
questo articolo di Wikipedia stati:
Nelle versioni a 64 bit di Windows, ci sono due cartelle per i file applicativi; la cartella
"Program Files"
contiene programmi a 64 bit, e la cartella"Program Files (x86)"
contiene programmi a 32 bit.
Quindi, se il programma è installato sotto C:\Program Files
si tratta di una versione a 64 bit. Se è installato sotto C:\Program Files (x86)
si tratta di un'installazione a 32 bit.
Un altro modo per rilevare il numero di bit di Office è quello di scoprire la libreria dei tipi.
Ad esempio, per rilevare bitness di Outlook, scrivere un file JS come segue:
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";
}
Si potrebbe scoprire di altro componente dell'Ufficio libreria dei tipi id, e sostituire la prima riga della funzione per esso. Ecco un breve elenco di ID interessanti:
{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
Tutti sopra id lib sono stati trovati attraverso lo strumento OLE-COM Object Viewer
SDK di Windows, è possibile saperne di più lib id usandolo.
Il vantaggio di questo approccio è che funziona per tutte le versioni di Office e fornisce il controllo su ogni singolo componente nel vostro interesse. Inoltre, queste chiavi sono in HKEY_CLASSES_ROOT e profondamente integrati nel sistema, quindi è altamente improbabile che non erano accessibili anche in un ambiente sandbox.
NOTA BENE: La funzione di cui sopra detectVersion non funziona . Ho una versione a 64 bit di Office, e uno separato con 32. Entrambe le versioni di utilizzare questa funzione di ritorno "32 bit".
Controllo del Registro di porta manualmente alla stessa conclusione:. Sia a 64 e 32 bit (Office 2010 e Office 2013 x64 a 32 bit) segnalare 32 bit
Personalmente penso che la squadra Ufficio dovrebbe semplicemente scrivere e mantenere un facile da ottenere la chiave di registro da qualche parte. Tutti add-in di necessità di fare riferimento a questo, e attualmente "indovinare" è un approccio povero per gli sviluppatori di essere costretti ad utilizzare.
Non è necessario per lo script di esso. Guardate questa pagina che mi sono imbattuto in:
Per riassumere:
Il quarto campo nel ProductCode indica il numero di bit del prodotto.
{BRMMmmmm-PPPP-LLLL- p 000-D000000FF1CE} P000
0 per x 86, 1 per x64 0-1 (Questo vale anche per MSOffice 2013)
Cerca nel Registro di sistema per il percorso di installazione del componente dell'ufficio che ti interessa, ad esempio, per Excel 2010 sguardo SOFTWARE (Wow6432Node) \ Microsoft \ Office \ 14.0 \ Excel \ InstallRoot. Sarà solo nel Registro di sistema a 32 bit o il Registro di sistema a 64 bit non entrambi.
Outlook bitness non esiste sulla mia macchina.
Un modo per determinare Outlook bitness è esaminando Outlook.exe, se stessa e determinare se è 32bit o 64bit.
In particolare, è possibile controllare la [IMAGE_FILE_HEADER.Machine] [1] digitare e questo restituirà un valore che indica il tipo di processore.
Per un eccellente background di questa discussione, leggendo l'intestazione PE di un file di lettura questo (link obsoleto) , in cui si afferma;
La struttura IMAGE_NT_HEADERS è il luogo primario in cui sono memorizzati specifiche del file PE. La sua si specifica un offset dal campo e_lfanew nel IMAGE_DOS_HEADER all'inizio del file. In realtà ci sono due versioni della struttura IMAGE_NT_HEADER, uno per gli eseguibili a 32 bit e l'altra per le versioni a 64 bit. Le differenze sono così piccola che io considero loro di essere lo stesso per i fini di questa discussione. L'unico modo corretto di Microsoft-approvato di differenziare tra i due formati è tramite il valore del campo Magia nel IMAGE_OPTIONAL_HEADER (descritto poco).
Un IMAGE_NT_HEADER è composto da tre campi:
typedef struct _IMAGE_NT_HEADERS {
DWORD Signature;
IMAGE_FILE_HEADER FileHeader;
IMAGE_OPTIONAL_HEADER32 OptionalHeader;
} IMAGE_NT_HEADERS32, *PIMAGE_NT_HEADERS32;
e si può ottenere il codice C # qui .
Il campo Magic è all'inizio della struttura IMAGE_OPTIONAL_HEADER, 2 byte all'offset 24 dall'inizio delle _IMAGE_NT_HEADERS. Ha valori di 0x10B per 32 bit e 0x20B 64-bit.
Non tramite il Registro di sistema, ma attraverso gli strumenti a riga di comando:
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 ( 86 ) \ Microsoft Office \ Root \ Office16 \ OUTLOOK.EXE" / f "% 1"
Miglior modo semplice: inserire l'icona INFO sul tuo Ufficio 2016 Application. Esempio Excel
1) Aprire Excel -> File -> Opzioni -> Personalizza barra multifunzione
2) You 'll vedere 2 riquadri. Scegliere Comandi Dalla & personalizzare la barra multifunzione
3) Da scegliere Comando, selezionare Tutti i comandi
4) dall'elenco risultante Highlight Chi (Excel)
5) Dal personalizzare la barra multifunzione Pain, evidenziare qualsiasi oggetto (es. View) in cui si desidera inserire l'icona About
6) Fare clic su Nuovo gruppo in fondo
7) Fare clic sul pulsante Aggiungi che si trova tra i due riquadro. Fine
Ora, quando si fa clic sulla scheda Visualizza in Excel e fare clic su vedrete a 32 bit o 64 bit
Ho trovato un modo molto più semplice. Utilizzando PowerShell, siamo in grado di agganciare Excel come un oggetto 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
Quando si richiede l'OperatingSystem in questo modo, si ottengono risultati strani, dare un'occhiata qui. PC3 è mio.
Spero che questo funziona per voi ragazzi. Ci scusiamo per la mancanza di codice; i miei script sono per lo più funzionali.
Modifica :
Non dimenticate di aggiungere il codice per chiudere Excel dopo aver finito il recupero dei dati.
Dopo aver testato questo codice ieri ho avuto tonnellate di apertura Excel e schiantarsi tutto ad un tratto ..
Questo farà in modo che manterrai utenti e gli amministratori felice (:
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($msoExcel)
Remove-Variable msoExcel
EDIT:. Soluzione senza toccare RegistryKeys - Mi dispiace Op
ho scoperto che c'è una soluzione in C # - l'originale si trova qui: https: / /blogs.msdn.microsoft.com/webdav_101/2016/07/26/sample-detecting-installed-outlook-and-its-bitness/
ho modificato un po 'per le mie esigenze.
basta passare il corretto outlookPath a 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;
}
Se si vuole sapere solo qual è il numero di bit di una versione installata di Office 2010, in qualsiasi applicazione di Office 2010 è sufficiente fare clic su File, quindi su Guida.Verranno elencate le informazioni sul numero di versione e accanto, tra parentesi, sarà (32 bit) o (64 bit).
Apri Outlook 2013> File> account Office> A proposito di Outlook> cliccare grande pulsante "? Chi Outlook"> leggi descrizione pop-up