Maintenant qu’Office est également installé en 64 bits, où trouvez-vous dans le registre si la version d’Office installée est 32 bits ou 64 bits?
À partir de l’article TechNet sur les éditions 64 bits d’Office 2010 :
Si vous avez installé Office 2010, y compris Microsoft Outlook 2010, Outlook définit une clé de Registre nommée Bitness de type REG_SZ sur l’ordinateur sur lequel il est installé. La clé de Registre Bitness indique si l’installation d’Outlook 2010 est 32 bits ou 64 bits. Cela peut être utile aux administrateurs intéressés par l’audit des ordinateurs pour déterminer les versions installées d’Office 2010 dans leur organisation.
- Chemin d’access du Registre: HKEY_LOCAL_MACHINE \ Software \ Microsoft \ Office \ 14.0 \ Outlook
- si vous avez installé Office 2013, utilisez ce chemin d’access du Registre: HKEY_LOCAL_MACHINE \ Software \ Microsoft \ Office \ 15.0 \ Outlook
- Clé de registre: Bitness
- Valeur: x86 ou x64
et ailleurs dans le même article:
À partir d’Office 2010, Outlook est disponible sous la forme d’une application 32 bits et d’une application 64 bits. La version (bitness) d’Outlook que vous choisissez dépend de l’édition du système d’exploitation Windows (32 bits ou 64 bits) et de l’édition d’Office 2010 (32 ou 64 bits) installée sur l’ordinateur, si Microsoft Office est déjà installé sur cet ordinateur.
Les facteurs qui déterminent la possibilité d’installer une version 32 bits ou 64 bits d’Outlook sont les suivants:
- Vous pouvez installer Office 2010 et Microsoft Outlook 2010 32 bits sur une édition 32 bits ou 64 bits du système d’exploitation Windows. Vous pouvez installer la version 64 bits d’Office 2010 et d’Outlook 2010 64 bits uniquement sur un système d’exploitation 64 bits pris en charge.
- L’installation par défaut d’Office 2010 sur une édition 64 bits du système d’exploitation Windows est Office 2010 32 bits.
- Le bitness d’une version installée d’Outlook est toujours le même que le bitness d’Office 2010, si Office est installé sur le même ordinateur. En d’autres termes, une version 32 bits d’Outlook 2010 ne peut pas être installée sur le même ordinateur sur lequel des versions 64 bits d’autres applications Office 2010 sont déjà installées, telles que Microsoft Word 2010 64 bits ou Microsoft Excel 2010 64 bits. , une version 64 bits d’Outlook 2010 ne peut pas être installée sur le même ordinateur sur lequel des versions 32 bits d’autres applications Office sont déjà installées.
J’ai testé la réponse d’Otaku et il semble que la valeur de bit Outlook soit définie même si Outlook n’est pas installé, même si l’article référencé n’indique pas clairement que ce serait le cas.
Pour append à la réponse de vtrz, voici une fonction que j’ai écrite pour 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 interestd in them. } { Declare Win32 function } function GetBinaryType(lpApplicationName: AnsiSsortingng; var lpBinaryType: Integer): Boolean; external '[email protected] stdcall'; function Is64BitExcelFromRegisteredExe(): Boolean; var excelPath: Ssortingng; binaryType: Integer; begin Result := False; { Default value - assume 32-bit unless proven otherwise. } { RegQuerySsortingngValue 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 RegQuerySsortingngValue(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;
Je regrette de le dire, mais les méthodes d’Otacku et de @ clatonh ne fonctionnent pas pour moi – ni Outlook Bitness ni {90140000-0011-0000- 1000 -0000000FF1CE} dans le registre (pour Office 64 bits sans Outlook installé).
La seule façon que j’ai trouvée, mais pas via le registre, est de vérifier le bitness pour l’un des exécutables Office à l’aide de la fonction GetBinaryType de l’API Windows (depuis Windows 2000 Professionnel).
Par exemple, vous pouvez vérifier le bitness de Winword.exe, quel chemin est stocké sous
HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows \ VersionVersion \ App Paths \ Winword.exe.
Voici le fragment de code MFC:
CRegKey rk; if (ERROR_SUCCESS == rk.Open(HKEY_LOCAL_MACHINE, "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\App Paths\\Winword.exe", KEY_READ)) { CSsortingng strWinwordPath; DWORD dwSize = MAX_PATH; if (ERROR_SUCCESS == rk.QuerySsortingngValue(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 }
Attention: l’interrogation du bitness de l’application Outlook ne fonctionne PAS de manière fiable si elle est appelée dans l’environnement .NET.
Ici, nous utilisons GetBinaryType () dans une DLL pouvant être appelée par n’importe quelle application:
Avec exactement le même code DLL et exactement le même chemin binary Outlook (“c: / Program Files (x86) / …”) sur le même ordinateur.
Cela signifie que vous devrez peut-être tester le fichier binary vous-même en utilisant l’entrée “IMAGE_NT_HEADERS.FileHeader.Machine”.
Dieu, je déteste les valeurs de retour incorrectes de certaines API Windows (voir aussi GetVersion () lie).
J’ai trouvé cette approche:
Si HKLM \ Software \ WOW6432Node existe, Windows est 64 bits.
Si HKLM \ Software \ WOW6432Node \ Microsoft \ Office existe, Office est alors 32 bits.
Si HKLM \ Software \ WOW6432Node \ Microsoft \ Office n’existe pas, mais que HKLM \ Software \ Microsoft \ Office existe, Office est 64 bits.
Si HKLM \ Software \ WOW6432Node n’existe pas, Windows et Office sont 32 bits.
Source: Forums Technet
Vous pouvez rechercher dans le registre {90140000-0011-0000- 0000 -0000000FF1CE}. Si les chiffres en gras commencent par 0, son x86, 1 correspond à x64
Pour moi, c’était dans HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Office \ 14.0 \ Registration {90140000-0057-0000-0000-0000000FF1CE}
La source
Ce code InnoSetup fonctionne pour moi sous Win 10×64 et Office 2016 x86 (en utilisant ‘HKLM \ SOFTWARE \ Microsoft \ Office \ ClickToRun \ Configuration’ et la clé ‘Platform’)
[Code] const RegOffice='SOFTWARE\Microsoft\Office\ClickToRun\Configuration'; RegOfficeKey='Platform'; /// /// Get current HKLM version /// function GetHKLM: Integer; begin if IsWin64 then Result := HKLM64 else Result := HKLM32; end; /// /// Check is Microsoft Office is installed or not /// function IsOfficeInstalled (): Boolean; var platform: ssortingng; begin RegQuerySsortingngValue(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;
Je n’ai pas de clé appelée bitness dans l’un de ces dossiers. J’ai une clé appelée “default” dans ces deux dossiers et la valeur est “non définie”. Mon ordinateur est venu avec le démarreur d’Office 2010 (je suppose que 64 bits). Je l’ai enlevé et j’ai essayé de faire une installation complète du bureau 32 bits. Je continue à recevoir le message suivant. le fichier est incompatible, vérifiez si vous avez besoin de la version x86 ou x64 du programme.
des conseils pour moi?
@clatonh: c’est le chemin du registre sur mon PC: HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Office \ 14.0 \ Registration {90140000-002A-0000-1000-0000000FF1CE} et il s’agit bien d’une installation 32 bits sur un 64 bits OS.
J’ai déjà suivi aveuglément la réponse basée sur les documents MSDN. Aujourd’hui, cela s’est avéré moins que nécessaire. Sur un ordinateur avec Office Famille et Étudiant installé, qui n’inclut pas Outlook, HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Office\14.0\Outlook
était présent, mais pas HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\14.0\Outlook
. J’ai maintenant changé mon code pour rechercher d’abord la version “plain” non-Wow6432Node. Si cela est présent, il sera utilisé. Sinon, il continuera en regardant la version de Wow6432Node. Ceci est en cours de vérification dans un installateur basé sur Inno Setup – je ne sais pas quelles API utilise Inno Setup. Si votre application n’accède pas au registre de la même manière, vous risquez de voir des résultats différents.
Voici ce que j’ai pu utiliser dans un VBscript pour détecter Office 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.ExpandEnvironmentSsortingngs("%PROCESSOR_ARCHITECTURE%") = "AMD64" And _ not instr(strOutlookPath, "x86") > 0 then blnOffice64=True wscript.echo "Office 64" End If
Je l’ai écrit pour Outlook dans un premier temps. Modifié un peu pour Word, mais il ne fonctionnera pas sur une installation autonome car cette clé ne montre pas la morsure, seul Outlook le fait.
De plus, je l’ai écrit pour ne supporter que les versions actuelles d’Office, => 2010
J’ai enlevé toute la configuration et le post-traitement …
: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
J’ai gagné 7 64 bits + Excel 2010 32 bits. Le registre est HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Office \ 14.0 \ Registration {90140000-002A-0000-1000-0000000FF1CE}
Donc, cela peut dire la bêtise du système d’exploitation, pas la bêtise d’Office
J’ai trouvé un moyen sûr et fiable dans mon script basé sur InnoSetup pour comprendre si une application particulière est 32 bits ou 64 bits (dans mon cas, je devais tester Excel), en utilisant une fonction API Win32. Cette fonction s’appelle GetBinaryType()
, elle vient de `kernel32 ‘(malgré son nom en 32 et 64 bits) et regarde directement l’en-tête de l’exe.
Cet article de Wikipedia indique:
Sur les versions 64 bits de Windows, il existe deux dossiers pour les fichiers d’application. le dossier
"Program Files"
contient des programmes 64 bits et le dossier"Program Files (x86)"
contient des programmes 32 bits.
Donc, si le programme est installé sous C:\Program Files
il s’agit d’une version 64 bits. S’il est installé sous C:\Program Files (x86)
il s’agit d’une installation 32 bits.
Une autre façon de détecter le bitness d’Office est de trouver la typelib.
Par exemple, pour détecter le bitness d’Outlook, écrivez un fichier .JS comme suit:
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("GetSsortingngValue"); 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("GetSsortingngValue"); 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"; }
Vous pouvez trouver l’ID de typelib d’un autre composant Office et remplacer la première ligne de la fonction par celle-ci. Voici une brève liste des identifiants intéressants:
{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
Tous les identifiants de lib ci-dessus ont été trouvés via l’outil Windows SDK OLE-COM Object Viewer
, vous pouvez trouver plus de lib id en l’utilisant.
L’avantage de cette approche est qu’elle fonctionne pour toutes les versions d’Office et permet de contrôler chaque composant de votre intérêt. De plus, ces clés se trouvent dans HKEY_CLASSES_ROOT et sont profondément intégrées au système. Il est donc peu probable qu’elles ne soient pas accessibles même dans un environnement de sandbox.
NOTE WELL: La fonction DétectVersion répertoriée ci-dessus ne fonctionne pas . J’ai une version 64 bits d’Office et une version séparée avec 32. Les deux versions utilisant cette fonction renvoient “32 bits”.
La vérification manuelle du registre mène à la même conclusion: les rapports 64 bits et 32 bits (Office 2010 x64 et Office 2013 32 bits) indiquent 32 bits.
Personnellement, je pense que l’équipe d’Office doit simplement écrire et maintenir une clé de registre facile à obtenir quelque part. Tous les add-in doivent faire référence à cela, et actuellement, “deviner” est une mauvaise approche pour les développeurs à utiliser.
Vous n’avez pas besoin de l’écrire. Regardez cette page que je suis tombé sur:
https://social.msdn.microsoft.com/Forums/office/en-US/43499ae0-bcb5-4527-8edb-f5a955987b56/how-to-detect-whether-installed-ms-office-2010-is-32- ou-64-bit? forum = worddev
Résumer:
Le quasortingème champ du code produit indique le bitness du produit.
{BRMMmmmm-PPPP-LLLL- p 000-D000000FF1CE} p000
0 pour x86, 1 pour x64 0-1 (cela vaut également pour MSOffice 2013)
Recherchez le chemin d’installation du composant bureautique qui vous intéresse dans le registre, par exemple pour Excel 2010 dans SOFTWARE (Wow6432Node) \ Microsoft \ Office \ 14.0 \ Excel \ InstallRoot. Ce ne sera que dans le registre 32 bits ou le registre 64 bits pas les deux.
La clé de registre Outlook Bitness n’existe pas sur ma machine.
Une façon de déterminer Outlook Bitness consiste à examiner Outlook.exe lui-même et à déterminer s’il est 32 bits ou 64 bits.
Plus précisément, vous pouvez vérifier le type [IMAGE_FILE_HEADER.Machine] [1] et cela renverra une valeur indiquant le type de processeur.
Pour un excellent contexte de cette discussion, en lisant l’en-tête PE d’un fichier, lisez ceci (lien obsolète) , qui indique;
La structure IMAGE_NT_HEADERS est l’emplacement principal où les spécificités du fichier PE sont stockées. Son décalage est donné par le champ e_lfanew dans IMAGE_DOS_HEADER au début du fichier. Il existe en fait deux versions de la structure IMAGE_NT_HEADER, l’une pour les exécutables 32 bits et l’autre pour les versions 64 bits. Les différences sont si mineures que je les considérerai identiques aux fins de cette discussion. Le seul moyen correct, approuvé par Microsoft, de différencier les deux formats est d’utiliser la valeur du champ Magic dans IMAGE_OPTIONAL_HEADER (décrit brièvement).
Un IMAGE_NT_HEADER est composé de trois champs:
typedef struct _IMAGE_NT_HEADERS { DWORD Signature; IMAGE_FILE_HEADER FileHeader; IMAGE_OPTIONAL_HEADER32 OptionalHeader; } IMAGE_NT_HEADERS32, *PIMAGE_NT_HEADERS32;
et vous pouvez obtenir le code c # ici .
Le champ Magic est au début de la structure IMAGE_OPTIONAL_HEADER, 2 octets au décalage 24 depuis le début de _IMAGE_NT_HEADERS. Il a des valeurs de 0x10B pour 32 bits et 0x20B pour 64 bits.
Pas via le registre mais via les outils de ligne de commande:
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”
Le meilleur moyen facile: Placez l’icône ABOUT sur votre application Office 2016. Exemple Excel
1) Ouvrez Excel -> Fichier -> Options -> Personnaliser le ruban
2) Vous verrez 2 panneaux. Choisissez les commandes à partir de et personnalisez le ruban
3) Dans Choisir une commande, sélectionnez Toutes les commandes
4) À partir de la liste résultante Surligner à propos (Excel)
5) À partir de l’option Personnaliser la douleur du ruban, mettez en surbrillance N’importe quel élément (par exemple, vue) où vous souhaitez placer l’icône À propos de
6) Cliquez sur Nouveau groupe en bas
7) Cliquez sur le bouton Ajouter situé entre les deux volets. TERMINÉ
Maintenant, lorsque vous cliquez sur l’onglet Affichage dans Excel et cliquez sur à propos de, vous verrez 32 bits ou 64 bits
J’ai trouvé le moyen de vérifier la morsure du bureau.
Nous pouvons vérifier le bitness Office 365 et 2016 en utilisant cette clé de registre:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\ClickToRun\Configuration
Plate-forme x86 pour 32 bits.
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\ClickToRun\Configuration
Plate-forme x64 pour 64 bits.
Vérifiez s’il vous plaît…
J’ai trouvé un moyen beaucoup plus facile. En utilisant Powershell, nous pouvons associer Excel à un object 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
Lorsque vous demandez le système d’exploitation de cette façon, nous obtenons des résultats étranges, regardez ici. PC3 est à moi.
J’espère que cela fonctionne pour vous les gars. Désolé pour le manque de code; mes scripts sont principalement fonctionnels.
Edit : N’oubliez pas d’append le code pour fermer Excel après avoir récupéré les données.
Après avoir testé ce code hier, j’ai eu des tonnes d’ouverture d’Excel et je suis tombé subitement en panne.
Cela vous assurera de garder les utilisateurs et les administrateurs heureux (:
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($msoExcel) Remove-Variable msoExcel
Si vous souhaitez connaître uniquement le numéro de bit d’une version installée d’Office 2010, dans n’importe quelle application d’Office 2010, cliquez simplement sur Fichier, puis sur Aide. Les informations sur le numéro de version seront répertoriées, et à côté de cela, entre parenthèses, seront soit (32 bits) ou (64 bits).
Ouvrez Outlook 2013> Fichier> Compte Office> À propos d’Outlook> cliquez sur le bouton “À propos d’Outlook”> Lisez la description contextuelle