¿Cómo puedo programar un script que pueda diferenciar entre x86 y x64?


2

Tengo algunos programas con los que estoy trabajando actualmente, como WinRAR , que tienen las versiones de 32 y 64 bits. Quiero crear un script (VB o Batch) en la raíz de la carpeta del proyecto que pueda "escanear" el programa adecuado para usar de acuerdo con la arquitectura del procesador de las máquinas locales.

¿Podría hacerse esto con un simple truco de nombre de archivo usando variables como WinRAR x86.exey WinRAR x64.exeo usando la arquitectura interna del programa si renombrar los binarios en un escenario dado no es una opción?

He descargado programas como Cheat Engine , que tienen versiones de 32 y 64 bits que también incluyen un binario que puede hacer esto.

¿Se puede hacer esto con una programación de script simple y, de ser así, cómo y con qué formato de script debo usar?


"¿Podría hacerse esto con un simple truco de nombre de archivo"? Posiblemente pero no siempre.
Ramhound


Amigo, eres inteligente y, aparentemente, dispuesto a aprender. Con toda honestidad, le sugiero que pase a un mejor lenguaje de scripting: Python (fácilmente multiplataforma) y si desea especializarse en Windows, use powershell (incluso la empresa matriz dedicada a convertirlo en mainstream) en lugar del script por lotes
RinkyPinku

Planeo aprender otros lenguajes de programación como Python, C, C ++, C #, etc. Simplemente no tengo tiempo para eso actualmente. Más recientemente, he estado aprendiendo Visual Basic (de ahí por qué sugerí la opción), parece ser más avanzado que el lote, y es probable que me lleve más tiempo aprenderlo.
Sr. Mendelli

De acuerdo, si tu proyecto no es un alto secreto, cuéntamelo. Trataré de implementarlo y darle el código con una explicación. Solo para que sepas cuán rápido es el desarrollo fácil en Python. Y C, C ++ no son lenguajes de script.
RinkyPinku

Respuestas:


6

Use el script por lotes o el script vb para almacenar la salida wmic os get osarchitecturey obtendrá un valor de cadena que dice 32 bits o 64 bits. Luego puede usar el típico condicional if-then-else para iniciar el binario apropiado. Problema resuelto.

Método alternativo:

La %PROCESSOR_ARCHITECTURE%variable de entorno almacena esta información, para comprender los posibles valores que devuelve, consulte esta publicación de blog: https://blogs.msdn.microsoft.com/david.wang/2006/03/27/howto-detect-process-bitness/


PS no depende de acceder a la unidad del sistema operativo (recuerde, no siempre es C:) buscar Program Files (x86)u otros hacks como ese, puede encontrarse con problemas de permisos y no es la forma estándar de hacerlo.


+1 porque no siempre es C:
RinkyPinku

De hecho, voy a colocar ambas versiones de un programa determinado en una carpeta con el script en la raíz al lado de las carpetas. Estoy haciendo esto para obtener los mejores resultados y la portabilidad. De esta manera, el script solo necesita buscar hacia adelante una vez.
Sr. Mendelli

Buen enfoque, pero luego debe cambiar el nombre manualmente de cada archivo (indicando sus versiones) y codificarlos en su secuencia de comandos. Es mejor mantener 2 carpetas 64-bity 32-biten la carpeta de cada programa. Este enfoque es semántico, más fácil de escribir y más escalable :)
RinkyPinku

Gracias por su información, pero todavía soy relativamente nuevo en programación. No puedo encontrar una manera de incorporar la %PROCESSOR_ARCITECTURE%variable en mi script. Por lo general, cuando hago un script por lotes que ejecuta otro programa, lo coloco lo más atrás posible, luego coloco la ruta al ejecutable o al objetivo entre comillas comenzando por ".\". Otras veces uso argumentos (si es posible) después de declarar la ruta de destino. ¿Sería tan amable de dar un ejemplo, suponiendo que las dos rutas posibles son "%X86PROG%\%X86PROG%.exe"y "%X64PROG%\%X64PROG%.exe%"?
Sr. Mendelli

1
@ Mr.Mendelli -echo %processor_architecture%%processor_architew6432% | findstr 64 >nul && set "prog=%x64prog%\%x64prog%.exe" || set "prog=%x86prog%\%x86prog%.exe"
dbenham
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.