tiene tengo saber que puede programas porque office instalar instalados descargar cómo cuando como cambiar caduca registry ms-office 32bit-64bit office-2010

registry - tengo - no se puede instalar la version de 64 bits de office porque tiene instalados programas de 32 bits



Detectar si Office es de 32 bits o de 64 bits a través del registro (27)

Ahora que Office también viene con una instalación de 64 bits, ¿en qué parte del registro averigua si la versión de Office instalada es de 32 o 64 bits?


@clatonh: esta es la ruta de acceso del registro en mi PC: HKEY_LOCAL_MACHINE / SOFTWARE / Microsoft / Office / 14.0 / Registration {90140000-002A-pP001000-0000000FF1CE} y definitivamente es una instalación de 32 bits en una de 64 bits OS


Abra Outlook 2013> Archivo> Cuenta de Office> Acerca de Outlook> haga clic en el botón grande "? Acerca de Outlook"> lea la descripción emergente


Anteriormente he seguido ciegamente la respuesta basada en los documentos de MSDN. Hoy, esto resultó ser menos de lo requerido. En una máquina con Office Home and Student instalado, que no incluye Outlook, HKEY_LOCAL_MACHINE/SOFTWARE/Wow6432Node/Microsoft/Office/14.0/Outlook estaba presente, pero HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Office/14.0/Outlook no estaba. Ahora he cambiado mi código para buscar primero la versión "simple" que no sea Wow6432Node. Si eso está presente, será utilizado. Si no, continuará mirando la versión de Wow6432Node. Esto se está comprobando en un instalador basado en Inno Setup. No sé qué API utiliza Inno Setup. Si su aplicación no accede al registro de la misma manera, es posible que vea resultados diferentes.


Atención: la consulta del bitness de la aplicación de Outlook NO funciona de manera confiable si se llama en un entorno .NET.

Aquí, usamos GetBinaryType () en una DLL a la que cualquier aplicación puede llamar:

  • Si la aplicación host es de 64 bits C / C ++, GetBinaryType () devuelve SCS_32BIT_BINARY.
  • Si la aplicación host es .NET de 64 bits (probamos "AnyCPU" en un sistema de 64 bits), GetBinaryType () devuelve SCS_64BIT_BINARY.

Con exactamente el mismo código DLL y exactamente la misma ruta binaria de Outlook ("c: / Program Files (x86) / ...") en la misma computadora.

Lo que significa que es posible que necesite probar el archivo binario utilizando la entrada "IMAGE_NT_HEADERS.FileHeader.Machine".

Dios, odio los valores de retorno incorrectos de algunas API de Windows (véase también la mentira de GetVersion ()).


Busque en el registro la ruta de instalación del componente de oficina en el que está interesado, por ejemplo, busque Excel 2010 en SOFTWARE (Wow6432Node) / Microsoft / Office / 14.0 / Excel / InstallRoot. Solo estará en el registro de 32 bits o en el registro de 64 bits no en ambos.


Del artículo de TechNet sobre ediciones de 64 bits de Office 2010 :

Si ha instalado Office 2010, incluido Microsoft Outlook 2010, Outlook establece una clave de registro llamada Testigo del tipo REG_SZ en la computadora en la que está instalado. La clave de registro de Bitness indica si la instalación de Outlook 2010 es de 32 bits o de 64 bits. Esto puede ser útil para los administradores interesados ​​en auditar equipos para determinar las versiones instaladas de Office 2010 en su organización.

  • Ruta del registro: HKEY_LOCAL_MACHINE / Software / Microsoft / Office / 14.0 / Outlook
  • Si ha instalado Office 2013, utilice esta ruta de registro: HKEY_LOCAL_MACHINE / Software / Microsoft / Office / 15.0 / Outlook
  • Clave de registro: Testigo
  • Valor: ya sea x86 o x64

y en otras partes del mismo artículo:

A partir de Office 2010, Outlook está disponible como una aplicación de 32 bits y una aplicación de 64 bits. La versión (bitness) de Outlook que elija dependerá de la edición del sistema operativo Windows (32 bits o 64 bits) y la edición de Office 2010 (32 o 64 bits) que se instala en la computadora, si Office ya está instalado en esa computadora.

Los factores que determinan la viabilidad de instalar una versión de Outlook de 32 bits o de 64 bits incluyen los siguientes:

  • Puede instalar Office 2010 de 32 bits y Microsoft Outlook 2010 de 32 bits en una edición compatible de 32 bits o 64 bits del sistema operativo Windows. Puede instalar la versión de 64 bits de Office 2010 y Outlook 2010 de 64 bits solo en un sistema operativo de 64 bits compatible.
  • La instalación predeterminada de Office 2010 en una edición de 64 bits del sistema operativo Windows es Office 2010 de 32 bits.
  • El bitness de una versión instalada de Outlook es siempre el mismo que el bit of Office 2010, si Office está instalado en la misma computadora. Es decir, no se puede instalar una versión de Outlook 2010 de 32 bits en la misma computadora en la que ya están instaladas las versiones de 64 bits de otras aplicaciones de Office 2010, como Microsoft Word 2010 de 64 bits o Microsoft Excel 2010 de 64 bits. , una versión de 64 bits de Outlook 2010 no se puede instalar en el mismo equipo en el que ya están instaladas las versiones de 32 bits de otras aplicaciones de Office.

Encontré el camino para revisar la oficina bitness.

Podemos verificar el bitness de Office 365 y 2016 usando esta clave de registro:

HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Office/ClickToRun/Configuration

Plataforma x86 para 32 bit.

HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Office/ClickToRun/Configuration

Plataforma x64 para 64 bit.

Por favor, compruebe...


Escribí esto para Outlook al principio. Lo modificó un poco para Word, pero no funcionará en una instalación independiente porque esa tecla no muestra el bitness, solo Outlook lo hace.

Además, lo escribí para admitir solo las versiones actuales de Office, => 2010

Me quité toda la configuración y el procesamiento posterior ...

: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


Este código de InnoSetup funciona para mí en Win 10x64 y Office 2016 x86 (usando ''HKLM / SOFTWARE / Microsoft / Office / ClickToRun / Configuración'' y la clave ''Plataforma'')

[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;


Esto es lo que pude usar en un VBscript para detectar 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.ExpandEnvironmentStrings("%PROCESSOR_ARCHITECTURE%") = "AMD64" And _ not instr(strOutlookPath, "x86") > 0 then blnOffice64=True wscript.echo "Office 64" End If


He encontrado este enfoque:

Si existe HKLM / Software / WOW6432Node, Windows es de 64 bits.

Si existe HKLM / Software / WOW6432Node / Microsoft / Office, Office es de 32 bits.

Si HKLM / Software / WOW6432Node / Microsoft / Office no existe, pero HKLM / Software / Microsoft / Office no existe, entonces Office es de 64 bits.

Si HKLM / Software / WOW6432Node no existe, entonces Windows y Office son de 32 bits.

Fuente: Foros de Technet


He encontrado una forma segura y confiable en mi script basado en InnoSetup para entender si una aplicación en particular es de 32 bits o de 64 bits (en mi caso, necesitaba probar Excel), mediante el uso de una función de API Win32. Esta función se llama GetBinaryType() , proviene de `kernel32 ''(a pesar de su nombre en 32 y 64 bits) y mira directamente al encabezado del exe.


He encontrado una manera mucho más fácil. Usando Powershell, podemos enganchar Excel como un objeto 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

Al solicitar el sistema operativo de esta manera, obtenemos resultados extraños, eche un vistazo aquí. PC3 es mio

Espero que esto funcione para ustedes. Perdón por la falta de código; Mis scripts son en su mayoría funcionales.

Editar : No olvide agregar el código para cerrar Excel una vez que haya terminado de recuperar los datos.
Después de probar este código ayer tuve un montón de Excel abriéndose y estrellándose de repente ...
Esto asegurará que mantendrás contentos a los usuarios y administradores (:

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


He ganado 7 64 bit + Excel 2010 32 bit. El registro es HKEY_LOCAL_MACHINE / SOFTWARE / Microsoft / Office / 14.0 / Registration {90140000-002A-Pt1000-0000000FF1CE}

Así que esto puede indicar el bitness del SO, no el bit de Office


He probado la respuesta de Otaku y parece que el valor de bitness de Outlook está configurado incluso cuando Outlook no está instalado, aunque el artículo al que se hace referencia no indica claramente que este sería el caso.


La clave de registro de Outlook Bitness no existe en mi máquina.

Una forma de determinar Outlook Bitness es mediante el examen de Outlook.exe, y determinar si es de 32 bits o de 64 bits.

Específicamente, puede verificar el tipo [IMAGE_FILE_HEADER.Machine] [1] y esto devolverá un valor que indica el tipo de procesador.

Para obtener un excelente fondo de esta discusión, al leer el encabezado de PE de un archivo, lea esto (enlace desactualizado) , que dice:

La estructura IMAGE_NT_HEADERS es la ubicación principal donde se almacenan los detalles específicos del archivo PE. Su desplazamiento viene dado por el campo e_lfanew en el IMAGE_DOS_HEADER al principio del archivo. En realidad, hay dos versiones de la estructura IMAGE_NT_HEADER, una para los ejecutables de 32 bits y la otra para las versiones de 64 bits. Las diferencias son tan pequeñas que las consideraré iguales para los fines de esta discusión. La única forma correcta, aprobada por Microsoft, de diferenciar entre los dos formatos es a través del valor del campo Magic en el IMAGE_OPTIONAL_HEADER (descrito brevemente).

Un IMAGE_NT_HEADER se compone de tres campos:

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

y puedes obtener el código c # here .

El campo Magic se encuentra al comienzo de la estructura IMAGE_OPTIONAL_HEADER, 2 bytes en el desplazamiento 24 desde el inicio de _IMAGE_NT_HEADERS. Tiene valores de 0x10B para 32 bits y 0x20B para 64 bits.


La mejor manera fácil: coloque el ícono ABOUT en su aplicación Office 2016. Ejemplo Excel

1) Abra Excel -> Archivo -> Opciones -> Personalizar cinta

2) Verás 2 paneles. Elija comandos desde y personalice la cinta

3) Desde el comando Elegir, seleccione todos los comandos

4) De la lista resaltada resultante (Excel)

5) En la pestaña Personalizar el dolor de la cinta, resalte Cualquier elemento (ej. Vista) donde desea colocar el icono Acerca de

6) Haga clic en Nuevo grupo en la parte inferior

7) Haga clic en el botón Agregar ubicado entre los dos paneles. HECHO

Ahora, cuando haga clic en la pestaña Ver en Excel y haga clic en sobre verá 32 bits o 64 bits


Lamento decirlo, pero los métodos de Otacku y @clatonh no me funcionan, ni Outlook Bitness ni {90140000-0011-0000- 1000 -0000000FF1CE} en el registro (para Office de 64 bits sin Outlook instalado).

Sin embargo, la única forma que he encontrado, no a través del registro, es verificar el bitness para uno de los ejecutables de Office con el uso de la función de API de Windows GetBinaryType (desde Windows 2000 Professional).

Por ejemplo, puede comprobar el bitness de Winword.exe, cuya ruta se almacena en
HKEY_LOCAL_MACHINE / SOFTWARE / Microsoft / Windows / CurrentVersion / App Paths / Winword.exe.

Aquí está el fragmento de código 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 }


NOTA BIEN: La función de detección detectada anteriormente no funciona . Tengo una versión de Office de 64 bits y una separada con 32. Ambas versiones que usan esta función devuelven "32 bits".

La comprobación manual del registro lleva a la misma conclusión: tanto el de 64 bits como el de 32 bits (Office 2010 x64 y Office 2013 32 bit) reportan 32 bits.

Personalmente creo que el equipo de Office debería simplemente escribir y mantener una clave de registro fácil de obtener en algún lugar. La necesidad de todos los complementos de hacer referencia a esto, y actualmente "adivinar" es un enfoque deficiente para que los desarrolladores se vean obligados a usar.


No a través del registro sino a través de herramientas de línea de comandos:

https://.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: / Archivos de programa ( x86 ) / Microsoft Office / Root / Office16 / OUTLOOK.EXE" / f "% 1"


No necesitas escribirlo. Mira esta página que encontré:

Source

Para resumir:

El cuarto campo en el código del producto indica el bitness del producto.

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

0 para x86, 1 para x64 0-1 (Esto también es válido para MSOffice 2013)


No tengo una clave llamada bitness en ninguna de estas carpetas. Tengo una clave llamada "predeterminada" en ambas carpetas y el valor es "no configurado". Mi computadora vino con Office 2010 Starter (supongo que de 64 bits). Lo quité e intenté hacer una instalación completa de la oficina de 32 bits. Sigo recibiendo el siguiente mensaje. el archivo no es compatible, verifique si necesita la versión x86 o x64 del programa.

¿Algún consejo para mí?


Otra forma de detectar el bitness de Office es averiguar la biblioteca de tipos.

Por ejemplo, para detectar el bitness de Outlook, escriba un archivo .JS de la siguiente manera:

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

Puede encontrar la identificación de biblioteca de otros componentes de Office y reemplazar la primera línea de la función. Aquí hay una breve lista de ID interesantes:

{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

Todos los ID de lib anteriores se encontraron a través del OLE-COM Object Viewer herramienta SDK de Windows; puede encontrar más ID de lib con su uso.

El beneficio de este enfoque es que funciona para todas las versiones de Office y proporciona control sobre cada componente que le interese. Además, esas claves están en HKEY_CLASSES_ROOT y están profundamente integradas en el sistema, por lo que es altamente improbable que no fueran accesibles incluso en un entorno de espacio aislado.


Para agregar a la respuesta de vtrz, aquí hay una función que escribí para 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://.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;


Puede buscar en el registro {90140000-0011-0000-0000 -0000000FF1CE}. Si los números en negrita comienzan con 0 su x86, 1 es x64

Para mi fue en HKEY_LOCAL_MACHINE / SOFTWARE / Microsoft / Office / 14.0 / Registration {90140000-0057-0000-0000-0000000FF1CE}

Source


Si solo desea saber qué número de bit es una versión instalada de Office 2010, en cualquier aplicación de Office 2010, simplemente haga clic en Archivo y luego en Ayuda. La información sobre el número de versión aparecerá en la lista, y junto a eso, entre paréntesis, aparecerá (32 bits) o (64 bits).


Este artículo de Wikipedia dice:

En las versiones de Windows de 64 bits, hay dos carpetas para archivos de aplicaciones; la carpeta "Program Files" contiene programas de 64 bits y la carpeta "Program Files (x86)" contiene programas de 32 bits.

Por lo tanto, si el programa se instala en C:/Program Files , es una versión de 64 bits. Si está instalado en C:/Program Files (x86) es una instalación de 32 bits.