Как перезапустить x32 битный процесс в 64-разрядном режиме?

Тема в разделе "Пакетные файлы CMD, BAT", создана пользователем Kиpилл, 23 июн 2015.

  1. Kиpилл
    Оффлайн

    Kиpилл Команда форума Администратор

    Лучший автор месяца

    Сообщения:
    12.224
    Симпатии:
    4.979
  2. Dragokas
    Оффлайн

    Dragokas Very kind Developer Команда форума Супер-Модератор Разработчик Клуб переводчиков

    Сообщения:
    4.492
    Симпатии:
    4.309
    Делал такой перезапуск процесса в проекте Virulogs.
    Вот набросал пример.
    Смотри как это работает:
    (батник запускать из-под c:\windows\syswow64\cmd.exe)
    Код (DOS):
    @echo off
    SetLocal EnableExtensions

    :: Получаю необходимые переменные

    call :GetOSBitness bitOS
    call :GetProcessBitness "%bitOS%" bitProc

    echo.
    echo Битность ОС: %bitOS%
    echo Битность процесса: %bitProc%
    echo.

    :: Сравниванию битности и перезапускаю процесс под x64 при необходимости

    call :DoEnvironRelaunch "%bitOS%" "%bitProc%"
    pause

    goto :eof


    :DoEnvironRelaunch [in.OS.Bitness] [in.Process.Bitness]
     :: Контроль запуска скрипта в среде, соответствующей разрядности ОС
     :: Попытка перезапустить процесс в режиме x64

      if /i "%~1"=="x64" if /i "%~2" NEQ "x64" (
       rem Если ОС >= Vista или XP с hotfix-ом http://support.microsoft.com/kb/942589
       rem попытаюсь перезапустить процесс через алиас Sysnative
        if exist "%windir%\Sysnative\*" (
          ;;; echo. Скрипт запущен из 32-битной среды. Пытаюсь перезапустить из x64.
          ;;; echo. Нажмите ENTER.
          pause >NUL
          cls
          "%windir%\Sysnative\cmd.exe" /c "%~nx0"
          exit
        ) else (
          ;;; echo Предпринят запуск из-под 32-битного приложения.
          ;;; echo СТРОГО рекомендуется перезапустить скрипт
          ;;; echo из проводника Windows.
          ;;; echo Работа скрипта будет завершена.
          exit
        )
    )
    Exit /B 0

    :GetOSBitness [out.var]
      Set "%~1=x64"& If /i "%PROCESSOR_ARCHITECTURE%"=="x86" If Not Defined PROCESSOR_ARCHITEW6432 Set "%~1=x32"
    Exit /B

    :GetProcessBitness [in.OS.Bitness] [out.var]
      set "%~2=x32"& if "%~1"=="x64" echo "%PROGRAMFILES%" |>nul find /i "x86" || set "%~2=x64"
    Exit /B
     
    vavun, Гимаев Наиль, Phoenix и 2 другим нравится это.
  3. Kиpилл
    Оффлайн

    Kиpилл Команда форума Администратор

    Лучший автор месяца

    Сообщения:
    12.224
    Симпатии:
    4.979
    Dragokas, вопрос: если запускается процесс командной строкой,то достаточно ли будет контролировать перезапуск консоли?
     
  4. Dragokas
    Оффлайн

    Dragokas Very kind Developer Команда форума Супер-Модератор Разработчик Клуб переводчиков

    Сообщения:
    4.492
    Симпатии:
    4.309
    Что ты понимаешь под
    ?
     
  5. Kиpилл
    Оффлайн

    Kиpилл Команда форума Администратор

    Лучший автор месяца

    Сообщения:
    12.224
    Симпатии:
    4.979
    Я имею это будет просто рекомендация запустить как положено?
    Думаю может скриптом проводник изначально запускать.
    Или вообще на vb переписать
     
  6. Dragokas
    Оффлайн

    Dragokas Very kind Developer Команда форума Супер-Модератор Разработчик Клуб переводчиков

    Сообщения:
    4.492
    Симпатии:
    4.309
    Поудаляй все pause.
    Добавь этот код в самое начало своего.
    Он сам себя перезапустит, если определит, что битность процесса не совпадает с битностью ОС.

    Единственное, что ты можешь наоборот добавить pause в конец вот этого сообщения:
    ;;; echo Предпринят запуск из-под 32-битного приложения.
    ;;; echo СТРОГО рекомендуется перезапустить скрипт
    ;;; echo из проводника Windows.
    ;;; echo Работа скрипта будет завершена.

    Это может случится только в одном случае - запуск на XP x64, на который не установлено вот это обновление: http://support.microsoft.com/kb/942589
     
  7. Kиpилл
    Оффлайн

    Kиpилл Команда форума Администратор

    Лучший автор месяца

    Сообщения:
    12.224
    Симпатии:
    4.979
    Это вообще маловероятно)))

    Допилю обновление и это тоже добавлю в скрипт.
    Над тем,что бы через explorer стартовать тоже подумаю.

    Спасибо за помощь)
     
  8. Dragokas
    Оффлайн

    Dragokas Very kind Developer Команда форума Супер-Модератор Разработчик Клуб переводчиков

    Сообщения:
    4.492
    Симпатии:
    4.309
    Koza Nozdri, только учти, что если ты откроешь папку (explorer.exe) через свой скрипт, то он тоже запустится под WOW64 (т.е. 32-разрядным),
    поэтому все делать нужно только через алиас Sysnative. К чему сложности, если все и так делается на автомате...
     
    Kиpилл нравится это.

Поделиться этой страницей