Tengo un .NET exe compilado para "AnyCPU", por lo que teóricamente puede ejecutarse tanto en modo de 32 bits como de 64 bits (en un sistema operativo de 64 bits). Dado que mi exe interactúa fuertemente con MS Office, necesito ejecutarlo con el mismo bitness que la versión de Office instalada . (Por favor, dé por sentado este requisito, con mucho gusto proporcionaré detalles en los comentarios, si está interesado).
Ahora, he pensado en una solución para esto, pero parece más complicado de lo necesario:
Esto funcionaría, pero prefiero tener un solo MyExe.exe simple con algo como el siguiente pseudocódigo durante el inicio:
if (Environment.Is64BitProcess && IsOffice32BitInstalled) { // restart myself in a 32-bit process instead of a 64-bit process ??? // <-- this is where I need help }¿Es eso posible? Si es así, ¿cómo?
Notas: Conozco la utilidad CorFlags , pero prefiero tener una solución que no requiera modificar el exe en tiempo de ejecución.
¿Reiniciar a través del parámetro de tiempo de ejecución es una opción?
dotnet run -r win-x86Aparentemente, no tengo la reputación suficiente para publicar comentarios, así que publiqué esto como respuesta.
Si, como usted dice, está implementando en una red interna, recomendaría usar un iniciador de todos modos .
De esa manera, los usuarios pueden tener un solo acceso directo de red al iniciador, que no se mueve. El iniciador puede determinar qué bitness se requiere y cuál es la versión más reciente e iniciar el EXE para esa versión.
Si permite que los usuarios vayan directamente al EXE, encontrará problemas con los usuarios que tienen el EXE abierto, por lo que no podrá sobrescribirlo, o tendrá que crear nuevos accesos directos de usuario para cada versión.