我正在尝试重写xCmd,它可以在远程计算机上启动进程.基本上,它将自身安装为目标计算机上的服务,然后启动所请求的进程.一切都很好,但我注意到一个错误.xCmd通过管道进行通信,它使用WriteFile().我的问题是,如果我运行我的API(或最初,都产生此错误),那么它将首次启动请求的进程,但如果我再次启动它,那么它将"冻结"在这一行:
WriteFile( hCommandPipe, &msg, sizeof(msg), &dwTemp, NULL );
Run Code Online (Sandbox Code Playgroud)
WriteFile没有返回任何错误代码,程序就在这里停止.我甚至无法关闭cmd窗口.当我关闭目标计算机上的服务时,我只能关闭它.任何人都可以帮我解决这个问题吗?这真烦人,我不知道:(
这是功能无法正常工作:
BOOL ExecuteRemoteCommand()
{
DWORD dwTemp = 0;
xCmdMessage msg;
xCmdResponse response;
::ZeroMemory( &msg, sizeof(msg) );
::ZeroMemory( &response, sizeof(response) );
FillMessage( &msg );
// Send message to service
WriteFile( hCommandPipe, &msg, sizeof(msg), &dwTemp, NULL );
// Connects to remote pipes (stdout, stdin, stderr)
if ( ConnectToRemotePipes( 5, 1000 ) )
{
StdOutput( _T("Ok\n\n") );
// Waiting for response from service
ReadFile( hCommandPipe, &response, sizeof(response), &dwTemp, NULL );
}
else
StdOutput( _T("Failed\n\n") );
if ( response.dwErrorCode == 0 )
_tprintf( _T("\nRemote command returned %d(0x%X)\n"),
response.dwReturnCode,
response.dwReturnCode );
else
_tprintf( _T("\nRemote command failed to start. Returned error code is %d(0x%X)\n"),
response.dwErrorCode,
response.dwErrorCode );
return TRUE;
}
Run Code Online (Sandbox Code Playgroud)
提前致谢!
kampi
| 归档时间: |
|
| 查看次数: |
3513 次 |
| 最近记录: |