我有一个.bat文件,它发送本地消息。当我自己运行它(双击),它工作(一条消息弹出)。不过,当我使用.bat和ShellExecute();一起启动时,它就不起作用了。会是什么情况?下面是代码:
message.bat
msg * hellomain.cpp
#include <windows.h>
int main()
{
ShellExecute(NULL, "open", "message.bat", NULL, NULL, 0);
}.bat中的其他东西,如start <something>、shutdown等,与ShellExecute();一起工作。
编辑我甚至不能用system();运行msg。它只在cmd或.bat文件中手动工作。
发布于 2015-10-23 16:54:31
会不会是在64位操作系统上将其编译为32位呢?在这种情况下,将不允许运行msg.exe。
发布于 2015-10-23 16:51:15
您应该运行这样的批处理文件:
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 );https://stackoverflow.com/questions/33305249
复制相似问题