您的位置:首页 > 编程语言 > C语言/C++

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

2017-03-02 22:39 357 查看
应同事需要做一个局域网时间同步的,找了下资料发现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不用设置控制台的输入输出流,也能执行成功,因为时间关系就不测试了,有兴趣的自己测试去.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  CreateProcess Cmd C++ Vs2013