Я не могу использовать команду msg в cmd (или пакет, если на то пошло). Как я могу это исправить?

Вопрос:

Пока в cmd или создании командного файла я не могу использовать команду msg. Когда я пытаюсь использовать его, он возвращает ошибку msg is not recognized as an internal or external command, operable program or batch file. “Я уверен, что ошибка в том, что я потерял msg.exe в system32, так что может кто-нибудь показать, как это получить? Я запускаю Windows 8.1.

Лучший ответ:

msg.exe не доступен на всех платформах Windows во всех средах.

Существует только %SystemRoot%\System32\msg.exe (64-разрядная %SystemRoot%\SysWOW64\msg.exe), но нет %SystemRoot%\SysWOW64\msg.exe (32-разрядная версия) для Windows 7 x64 Enterprise, из-за чего необходимо получить доступ к 64-разрядному msg.exe из в 32-битном командном процессе, используя %SystemRoot%\Sysnative\msg.exe.

Дополнительные сведения о System32, SysWOW64 и Sysnative см. В статье Microsoft о Sysnative файловой системы

Что это значит?

  1. Для запуска пакетного файла на 32-разрядной Windows необходимо запустить %SystemRoot%\System32\msg.exe.

  2. Командный файл, выполняемый в 64-разрядной Windows 64-разрядным cmd.exe должен запускать %SystemRoot%\System32\msg.exe.

  3. Командный файл, выполняемый в 64-разрядной Windows 32-разрядным cmd.exe должен запускать %SystemRoot%\Sysnative\msg.exe.

Это зависит от ширины битов родительского процесса, начиная с cmd.exe или командного файла, который неявно приводит к запуску cmd.exe для исполнения командного файла, если пакетный файл выполняется в 32-разрядной или 64-разрядной среде на 64-битной Windows,

Таким образом вызывается пакетный файл с использованием явно %SystemRoot%\Sysnative\cmd.exe из 32-разрядного приложения в Windows x64 или внутри пакетного файла %SystemRoot%\Sysnative\msg.exe используется на машине Windows x64 во время работы необходимо использовать Windows x86 %SystemRoot%\System32\cmd.exe %SystemRoot%\System32\msg.exe.

Демо-пример для первого варианта с использованием 64-разрядного интерпретатора командной строки:

Пакетный файл с именем MsgDemo.bat:

@echo off
%SystemRoot%\System32\msg.exe /?
pause

вызывается из 32-разрядного процесса, выполняющегося в Windows x64, с:

%SystemRoot%\Sysnative\cmd.exe /C MsgDemo.bat

Демо-пример для второго варианта с правильной ссылкой msg.exe:

@echo off
set "AppMsg=%SystemRoot%\System32\msg.exe"
if not "%ProgramFiles(x86)%" == "" (

    rem Explicitly reference 64-bit version on Windows x64 as there is
    rem no 32-bit version. But use Sysnative redirector only if the batch
    rem file was started with 32-bit cmd.exe as otherwise System32 contains
    rem msg.exe if it is not missing at all like on Windows 7 Home Premium.

    if exist %SystemRoot%\Sysnative\* set "AppMsg=%SystemRoot%\Sysnative\msg.exe"
)
%AppMsg% /?
set "AppMsg="
pause

Редиректор %SystemRoot%\Sysnative не существует для 64-битных процессов, только для 32-битных процессов.

%SystemRoot%\Sysnative не является каталогом. Поэтому, if exist %SystemRoot%\Sysnative не работает, просто if exist %SystemRoot%\Sysnative\*.

Ответ №1

Скопируйте файл msg.exe из любого ПК с Windows 7 из каталога system32 и прошлого целевого ПК system32.

Работа для меня отлично

Оцените статью
TechArks.Ru
Добавить комментарий