у меня есть .bat
файл, который отправляет локальное сообщение. Когда я запускаю его сам (двойной щелчок), он работает (выскакивает сообщение). Это не работает, когда я запускаю .bat с ShellExecute();
хоть. В чем может быть дело? Вот код:
message.bat
msg * hello
main.cpp
#include <windows.h>
int main()
{
ShellExecute(NULL, "open", "message.bat", NULL, NULL, 0);
}
Другие вещи в .bat
такие как start <something>
, shutdown
и т. д. работать с ShellExecute();
,
РЕДАКТИРОВАТЬ Я даже не могу бежать msg
с system();
, Работает только вручную с cmd
или .bat
файл.
Может быть, вы собираете его как 32-битную на 64-битной ОС? в этом случае не будет разрешено запускать msg.exe
Вы должны запустить командные файлы, как это:
const TCHAR batchFilePath[MAX_PATH] = _T("C:\\Test\\message.bat");
TCHAR systemDirPath[MAX_PATH] = _T("");
::GetSystemDirectory( systemDirPath, sizeof(systemDirPath)/sizeof(_TCHAR) );
TCHAR commandLine[2 * MAX_PATH + 16] = _T("");
_sntprintf( commandLine, sizeof(commandLine)/sizeof(_TCHAR),
_T("\"%s\\cmd.exe\" /C \"%s\""), systemDirPath, batchFilePath );
STARTUPINFO si = {0};
si.cb = sizeof(si);
PROCESS_INFORMATION pi = {0};
if( !::CreateProcess( NULL,
commandLine,
NULL,
NULL,
FALSE,
0,
NULL,
NULL,
&si,
&pi )
)
{
_tprintf( _T("CreateProcess failed (%d)\n"), GetLastError() );
return FALSE;
}
::WaitForSingleObject( pi.hProcess, INFINITE );
::CloseHandle( pi.hProcess );
::CloseHandle( pi.hThread );