用MFC使用pstool调用服务器的bat,有些问题?

ztasd6530 2011-08-15 06:44:16
我用CreateProcess调用psexec.exe执行服务器上的bat时,总是执行的很快,一眨眼就过了。现在服务器上的startup.bat和stop.bat执行起来都没啥问题,可是执行deploy.bat时,因为这个bat执行时间较长,但是程序在调用时每次都是眨眼就没了,所以一直执行失败,不知道有没有什么好的解决办法。
...全文
92 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
ztasd6530 2011-08-23
  • 打赏
  • 举报
回复
现在有个新的问题,我的编辑框不会在显示管道内容之前清空,总是等管道内容显示完后,最后才会清空其它的内容。如图,红框中的是之前的内容,我想在显示管道内容之前清空它。
ztasd6530 2011-08-22
  • 打赏
  • 举报
回复
上面的问题用多线程解决了,再问个问题,如何用SendMessage清空Edit Box?
chunyou128 2011-08-22
  • 打赏
  • 举报
回复
		SHELLEXECUTEINFO ShExecInfo = {0};
ShExecInfo.cbSize = sizeof(SHELLEXECUTEINFO);
ShExecInfo.fMask = SEE_MASK_NOCLOSEPROCESS;
ShExecInfo.hwnd = NULL;
ShExecInfo.lpVerb = _T("open");
ShExecInfo.lpFile = strFilePath;
ShExecInfo.lpParameters = strPara;
ShExecInfo.nShow = SW_HIDE;
ShellExecuteEx(&ShExecInfo);
WaitForSingleObject(ShExecInfo.hProcess,INFINITE);

WaitForSingleObject 就OK了
xxq123321 2011-08-21
  • 打赏
  • 举报
回复
把循环换成定时器试试
ztasd6530 2011-08-20
  • 打赏
  • 举报
回复
现在遇到了个新问题,我想使用匿名管道将执行的结果显示出来,但是代码中有段while (true),如果在执行时对对话框进行了操作,就会导致程序无响应,有没有什么解决方法?或者运行while (true)时屏蔽其他消息。
之前试过多线程,但是没有输出。

BOOL ExecuteCmd(CString strCmd, bool bDisplay)
{
SECURITY_ATTRIBUTES sa;
HANDLE hRead, hWrite;
sa.nLength = sizeof(SECURITY_ATTRIBUTES);
sa.lpSecurityDescriptor = NULL;
sa.bInheritHandle = TRUE;
if (!CreatePipe(&hRead,&hWrite,&sa,0))
{
MessageBox("CreatePipe Failed!", "错误", MB_OK | MB_ICONHAND);
return FALSE;
}

STARTUPINFO si;
PROCESS_INFORMATION pi;
ZeroMemory(&si, sizeof(STARTUPINFO));
si.cb = sizeof(STARTUPINFO);
GetStartupInfo(&si);
si.hStdError = hWrite;
si.hStdOutput = hWrite;
si.wShowWindow = SW_HIDE;
si.dwFlags = STARTF_USESHOWWINDOW | STARTF_USESTDHANDLES;

char* cmdline = strCmd.GetBuffer(strCmd.GetLength() + 1);

if (!CreateProcess(NULL, cmdline, NULL, NULL, TRUE, NULL, NULL, NULL, &si, &pi))
{
MessageBox("CreateProcess Failed!", "错误", MB_OK | MB_ICONHAND);
return FALSE;
}
CloseHandle(hWrite);

if (bDisplay)
{
char buffer[4096] = {0};
DWORD bytesRead;

while (true)
{
RtlZeroMemory(buffer, 1024);
if(ReadFile(hRead, buffer, 4095, &bytesRead, NULL) == NULL)
{
break;
}
::SendMessage(m_ctrlEditInfo, EM_SETSEL, -1, 0);
::SendMessage(m_ctrlEditInfo, EM_REPLACESEL, false, (long)buffer);
}
}
CloseHandle(hRead);
return TRUE;
}
xxq123321 2011-08-19
  • 打赏
  • 举报
回复
在deploy.bat文件里的第一行和最后一行加上
pause 看看
oyljerry 2011-08-16
  • 打赏
  • 举报
回复
先看你的deploy.bat是否执行成功,其次看在什么地方退出了.

18,363

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧