2015-10-23 5 views
0

У меня есть файл .bat, который отправляет локальное сообщение. Когда я запускаю его сам (дважды щелкните), он работает (появляется сообщение). Это не работает, когда я запускаю .bat с ShellExecute();. Что может быть? Вот код:C++ ShellExecute msg issue

message.bat

msg * hello 

main.cpp

#include <windows.h> 

int main() 
{ 
    ShellExecute(NULL, "open", "message.bat", NULL, NULL, 0); 
} 

Другие вещи в .bat, таких как start <something>, shutdown и т.д. работа с ShellExecute();.

EDIT Я не могу даже запустить msg с system();. Он работает только вручную с cmd или .bat.

ответ

0

Может быть, вы собираете его как 32bit на 64-битной ОС? в этом случае ему не разрешено запускать msg.exe

+1

Это сработало человеком :) Теперь я знаю! – gregjj2

0

Вы должны запустить командные файлы, как это:

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); 
Смежные вопросы