Делал такой перезапуск процесса в проекте Virulogs.
Вот набросал пример.
Смотри как это работает:
(батник запускать из-под c:\windows\syswow64\cmd.exe)
CMD/BATCH:
@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
Поудаляй все pause.
Добавь этот код в самое начало своего.
Он сам себя перезапустит, если определит, что битность процесса не совпадает с битностью ОС.
Единственное, что ты можешь наоборот добавить pause в конец вот этого сообщения:
;;; echo Предпринят запуск из-под 32-битного приложения.
;;; echo СТРОГО рекомендуется перезапустить скрипт
;;; echo из проводника Windows.
;;; echo Работа скрипта будет завершена.
Koza Nozdri, только учти, что если ты откроешь папку (explorer.exe) через свой скрипт, то он тоже запустится под WOW64 (т.е. 32-разрядным),
поэтому все делать нужно только через алиас Sysnative. К чему сложности, если все и так делается на автомате...