intentado - C#System.Diagnostics.Process: no se puede iniciar un archivo exe de 32 bits en un sistema operativo de 64 bits
excepción de hresult 0x8007000b)'' (4)
Tengo un archivo exe de 32 bits compilado con Turbo Pascal. Necesito lanzarlo. Funcionó bien cuando tenía Windows 7 de 32 bits, pero ahora estoy en Windows 7 de 64 bits y obtengo la siguiente excepción:
El ejecutable especificado no es una aplicación válida para esta plataforma de sistema operativo.
Para asegurarme de que funciona en sistemas de 32 bits, lancé el programa C # en una plataforma de 32 bits; funciona.
Entonces, ¿cómo puedo lanzar un archivo exe de 32 bits en un sistema operativo de 64 bits?
Gracias
No creo que haya un compilador de 64 bits para Turbo Pascal, así que creo que tu única opción es compilar tu aplicación orientada a un entorno de 32 bits.
Si está ejecutando el exe de 32 bits desde una aplicación .NET (C #), deberá establecer el destino para su aplicación .NET en x86. Si está configurado como Any CPU, se ejecutará como un proceso de 64 bits en un sistema operativo de 64 bits y, por lo tanto, no podrá iniciar el proceso de 32 bits.
Editar: Este artículo de MSDN explica cómo modificar esta configuración: http://msdn.microsoft.com/en-us/library/5b4eyb0k.aspx
Edición 2: como señala Gabe, no debería haber una razón por la cual la aplicación de 64 bits no podría iniciar un exe de 32 bits. Sé que no puede usar una DLL de 32 bits desde una aplicación de 64 bits. Simplemente pensé que valdría la pena intentarlo ya que la documentación no especifica si existe esa misma restricción cuando se usa System.Diagnostics.Process
para iniciar un exe.
Turbo Pascal solo podía generar código de 16 bits, nunca hubo una versión que pudiera crear ejecutables de 32 bits. La ejecución de un código de 16 bits requiere una máquina virtual que utiliza el soporte de emulación en modo real en la CPU ( modo 8086 virtual ). Esta emulación no está disponible si el procesador se está ejecutando en modo de 64 bits.
No puede ejecutar procesos de 16 bits en un sistema operativo de 64 bits. Puede intentarlo con el emulador DOSBox .
Puede iniciar la aplicación de 32 bits desde la aplicación de 64 bits.
C # Ejemplo 1:
var processStartInfo = new ProcessStartInfo("C:/MyApp.exe");
var process = new Process { StartInfo = processStartInfo };
process.Start();
process.WaitForExit();
C # Ejemplo 2:
System.Diagnostics.Process.Start("C:/MyApp.exe");