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.