Вопрос: Как запустить exe на основе размера бит Windows?


У меня есть два файла .exe, и я хотел бы создать одну программу, которая сможет запускать одну из них на основе размера бит Windows (т. Е. Запускать program1.exe если 64-бит и запустить program2.exe если 32-бит). Кто-нибудь знает, с чего я должен начать искать?


0
2018-04-14 19:15


Источник


вы имеете в виду 32 или 64 бит? - Keltari
@Keltari да. Я отредактировал вопрос, чтобы сделать это более понятным - yiwei
эти программы вы написали? - Keltari
нет. они установщики, и я просто хотел бы запустить их на основе установленной версии окон - yiwei


Ответы:


Вы можете использовать простой скрипт Windows Powershell в качестве вашей пусковой установки.

Вот как вы можете рассказать свой архитектурный проспект от PS: http://depsharee.blogspot.com/2011/06/how-do-detect-operating-system.html

Идея состоит в том, чтобы проверить, сколько байтов занимает структура IntPtr. 4 => 32b, 8 => 64b.

Если вы действительно хотите exe, в DotNet, вы можете использовать эту проверку, чтобы определить, поддерживает ли ее 64b:

BOOL Is64BitWindows() {
 #if defined(_WIN64)
  return TRUE;  // 64-bit programs run only on Win64
 #elif defined(_WIN32)
  // 32-bit programs run on both 32-bit and 64-bit Windows
  // so must sniff
  BOOL f64 = FALSE;
  return IsWow64Process(GetCurrentProcess(), &f64) && f64;
 #else
  return FALSE; // Win64 does not support Win16
 #endif
}

больше информации здесь: http://blogs.msdn.com/b/oldnewthing/archive/2005/02/01/364563.aspx


1
2018-04-14 19:39



Будет ли этот сценарий работать на любой версии Windows? - yiwei
да, если он запускает powershell. или попробуйте использовать .net-подход. - Frank Thomas
Какой сценарий? Код в ответе - c # - Ramhound
@Ramhound, любой из скриптов в ссылке на blogspot. они охватывают несколько методов, включая запросы WMI. Я думаю, что IntPtr самый изящный. - Frank Thomas


Вы всегда можете проверить %programfiles(x86)% переменная среды. Если это 64-разрядная машина Windows, она вернет путь к «Program Files (x86)», если он не является 64-битным, он не будет определен и просто вернет «% programfiles (x86)%».

Вы можете проверить это с помощью пакета, PS, .Net или любого другого, что вы хотите. :)


0
2018-04-14 19:50