«mblctr» не распознается как внутренняя или внешняя команда, работающая программа или командный файл. Как это исправить? - PullRequest
0 голосов
/ 30 января 2019

Я создал кнопку в vs, чтобы открыть центр мобильности.когда я запускаю код, он показывает, что ошибка «mblctr» не распознана, но при запуске «mblctr» в cmd все работает нормально. Это мой код, кто-то мне помогает

private: System::Void button21_Click(System::Object^  sender, System::EventArgs^  e) {
    //system("C:\\Windows\\System32\\mblctr.exe");
    system("mblctr");
 }

1 Ответ

0 голосов
/ 30 января 2019

mblctr.exe существует только как 64-битное приложение в 64-битной Windows.32-разрядное приложение не видит ту же папку System32, что и 64-разрядные приложения.Вы можете получить доступ к 64-битной папке System32 в 32-битных приложениях с помощью виртуальной папки sysnative.

#include <shellapi.h>
...
INT_PTR ret = (INT_PTR) ShellExecute(NULL, NULL, TEXT("mblctr.exe"), 0, 0, SW_SHOW);
if (ret <= 32)
{
    TCHAR buf[MAX_PATH];
    GetWindowsDirectory(buf, MAX_PATH);
    lstrcat(buf, TEXT("\\sysnative\\mblctr.exe")); // Hopefully this fits in MAX_PATH, you might want to check in a real program.
    ShellExecute(NULL, NULL, buf, 0, 0, SW_SHOW);
}

Она работает в cmd.exe, поскольку при запуске вы запускаете 64-битную версию cmd.вручную.Если вы запустите 32-разрядную версию cmd.exe, произойдет сбой:

Win + R"cmd"

C:\Users\Anders>%windir%\syswow64\cmd.exe
Microsoft Windows [Version 6.2.9200]
(c) 2012 Microsoft Corporation. All rights reserved.

C:\Users\Anders>mblctr.exe
'mblctr.exe' is not recognized as an internal or external command,
operable program or batch file.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...