关于C++运行CMD命令net time

来源:互联网 发布:网络电视台直播 编辑:程序博客网 时间:2024/05/04 10:24

应同事需要做一个局域网时间同步的,找了下资料发现net time最方便,于新建了一个控制台项目,用CreateProcess运行cmd命令

运行了后发现时间根本就没有改变,折腾了一个晚上才发现错在字符转义上,下面的代码是错误示范

//定义一个用于产生子进程的STARTUPINFO结构体 (定义见CreateProcess,函数说明)    STARTUPINFO siStartInfo;//定义一个用于产生子进程的PROCESS_INFORMATION结构体 (定义见CreateProcess,函数说明)    PROCESS_INFORMATION piProcInfo;//对STARTUPINFO结构体赋值,对stdin,stdout的Handle设置为刚才得到的管道HANDLE    ZeroMemory(&siStartInfo, sizeof(STARTUPINFO));siStartInfo.cb = sizeof(STARTUPINFO);siStartInfo.dwFlags = STARTF_USESHOWWINDOW|STARTF_USESTDHANDLES;  //允许设置showwindow和设置新进程的输入输出句柄参数  siStartInfo.wShowWindow = SW_HIDE;siStartInfo.hStdOutput = GetStdHandle(STD_OUTPUT_HANDLE);     //意思是:子进程的stdout输出到hStdOutWrite    siStartInfo.hStdError = GetStdHandle(STD_ERROR_HANDLE);        //意思是:子进程的stderr输出到hStdErrWrite    siStartInfo.hStdInput = GetStdHandle(STD_INPUT_HANDLE);TCHAR CommandLine[] = _T("/c net time \\192.168.1.1 /set /y >C:\\2.txt");  //  //ShellExecute(NULL, _T("open"), _T("C:\\Windows\\System32\\cmd.exe"), CommandLine, NULL, SW_SHOW);// 产生子进程,具体参数说明见CreateProcess函数    BOOL bSuccess = CreateProcess(L"C:\\Windows\\System32\\cmd.exe",CommandLine,    // 子进程的命令行    NULL,                   // process security attributes    NULL,                   // primary thread security attributes    FALSE,                   // handles are inherited    CREATE_NO_WINDOW,       // creation flags  如果想新进程显示窗口, 可以设置CREATE_NEW_CONSOLE  NULL,                  // use parent's environment    NULL,                  // use parent's current directory    &siStartInfo,      // STARTUPINFO pointer    &piProcInfo);     // receives PROCESS_INFORMATION if (bSuccess){TCHAR prints[MAX_PATH] = { 0 };_stprintf_s(prints, MAX_PATH, _T("ID:%d,Process:%d\n"), piProcInfo.dwProcessId, piProcInfo.hProcess);//MessageBox(NULL, prints, NULL, MB_SETFOREGROUND);CloseHandle(piProcInfo.hProcess);CloseHandle(piProcInfo.hThread);//WaitForSingleObject(piProcInfo.hProcess, INFINITE);}

以下是正确的代码,写了这么久的代码竟然忽略了在C++两个\\表示一个\ ,

因为远程IP是用双\\表示的,在C++就要多加两个\\


结束语:

感觉CreateProcess不用设置控制台的输入输出流,也能执行成功,因为时间关系就不测试了,有兴趣的自己测试去.

0 0
原创粉丝点击