Beispiel #1
0
bool removeService()
{
  AFILE_TRACER_DEBUG_SCOPE("removeService", NULL);
  SC_HANDLE schManager = ::OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS);
  if (NULL == schManager)
  {
    AFILE_TRACER_DEBUG_MESSAGE("Unable to open service control manager", NULL);
    ATHROW_LAST_OS_ERROR(NULL);
  }

  AFILE_TRACER_DEBUG_MESSAGE((AString("Trying to open service: ")+AOS_SERVICE_NAME).c_str(), NULL);
  SC_HANDLE schService = ::OpenService(schManager, AOS_SERVICE_NAME, SERVICE_ALL_ACCESS);
  if (NULL == schService)
  {
    //a_Open service failed
    AFILE_TRACER_DEBUG_MESSAGE("Unable to open service", NULL);
    u4 lastOSError = ::GetLastError();
    closeService(schManager, schService);
    ATHROW_LAST_OS_ERROR_KNOWN_EX(NULL, lastOSError, AString("Unable to open service: ")+AOS_SERVICE_NAME);
  }
  AFILE_TRACER_DEBUG_MESSAGE((ASWNL("Service opened: ")+AOS_SERVICE_NAME).c_str(), NULL);

  if(schService && !DeleteService(schService))
  {
    //a_Unable to delete
    DWORD errorNumber = GetLastError();
    closeService(schManager, schService);
    ATHROW_LAST_OS_ERROR_KNOWN(NULL, errorNumber);
  }

  AFILE_TRACER_DEBUG_MESSAGE("Service removed.", NULL);
  closeService(schManager, schService);
  return 1;
}
Beispiel #2
0
bool installService()
{
  AFILE_TRACER_DEBUG_SCOPE("installService", NULL);
  
  AFILE_TRACER_DEBUG_MESSAGE("Service connected to controller.", NULL);
  SC_HANDLE schManager = ::OpenSCManager(NULL, SERVICES_ACTIVE_DATABASE, SC_MANAGER_ALL_ACCESS | SC_MANAGER_CREATE_SERVICE);
  if(!schManager)
  {
    AFILE_TRACER_DEBUG_MESSAGE("Unable to open service manager", NULL);
    ATHROW_LAST_OS_ERROR(NULL);
  }

  //a_Now that the service manager is open, let's open the service
  char sPath[1024];   //a_Who knows, long filenames may be really long
	GetModuleFileName(GetModuleHandle(NULL), sPath, 1023);

  // "Normalize" the name and add the arguments.
  AString imagePath;
  if ( sPath[0] != '\"' )
  {
    imagePath  = '\"';
    imagePath += sPath;
    imagePath += '\"';
  }
  else
  {
    imagePath = sPath;
  }

  SC_HANDLE schService = ::CreateService(
    schManager,                        // SC_HANDLE hSCManager,      
    AOS_SERVICE_NAME,                  // LPCSTR lpServiceName,     
    AOS_SERVICE_NAME,                  // LPCSTR lpDisplayName,     
    SERVICE_ALL_ACCESS,                // DWORD dwDesiredAccess,     
    SERVICE_WIN32_OWN_PROCESS,         // DWORD dwServiceType,       
    SERVICE_AUTO_START,                // DWORD dwStartType,         
    SERVICE_ERROR_NORMAL,              // DWORD dwErrorControl,      
    TEXT(imagePath.c_str()),           // LPCSTR lpBinaryPathName,  
    NULL,                              // LPCSTR lpLoadOrderGroup,  
    NULL,                              // LPDWORD lpdwTagId,         
    NULL,                              // LPCSTR lpDependencies,    
    NULL,                              // LPCSTR lpServiceStartName,
    NULL                               // LPCSTR lpPassword         
  );

  if (NULL == schService)
  {
    AFILE_TRACER_DEBUG_MESSAGE("Unable to create service", NULL);
    u4 lastOSError = ::GetLastError();
    closeService(schManager, schService);
    ATHROW_LAST_OS_ERROR_KNOWN(NULL, lastOSError);
  }
  else
  {
    //a_Set service optional info after create
    SERVICE_DESCRIPTION sd;
    sd.lpDescription = AOS_SERVICE_DESC;
    if (!::ChangeServiceConfig2(schService, SERVICE_CONFIG_DESCRIPTION, &sd))
      ATHROW_LAST_OS_ERROR(NULL);
  }
  closeService(schManager, schService);
  AFILE_TRACER_DEBUG_MESSAGE("Service installed.", NULL);

  return true;
}
Beispiel #3
0
//
//  函数: WndProc(HWND, UINT, WPARAM, LPARAM)
//
//  目的: 处理主窗口的消息。
//
//  WM_COMMAND	- 处理应用程序菜单
//  WM_PAINT	- 绘制主窗口
//  WM_DESTROY	- 发送退出消息并返回
//
//
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
	int wmId, wmEvent;
	PAINTSTRUCT ps;
	HDC hdc;

	switch (message)
	{
	case WM_COMMAND:
		wmId    = LOWORD(wParam);
		wmEvent = HIWORD(wParam);
		// 分析菜单选择:
		switch (wmId)
		{
		case IDM_ABOUT:
			DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About);
			break;
		case IDM_EXIT:
			DestroyWindow(hWnd);
			break;
		case IDB_BUTTON:
			
			break;
		case IDB_BUTTON_CONNECT:
			TCHAR ip_port[MAX_NUM_BUF];
			memset(ip_port,0,MAX_NUM_BUF);
			GetWindowText(ipEditHwnd, ip_port, MAX_NUM_BUF);
			strcpy_s(ip, sizeof(ip), ip_port);
			memset(ip_port,0,MAX_NUM_BUF);
			GetWindowText(portEditHwnd, ip_port, MAX_NUM_BUF);
			port = atoi(ip_port);

			if(connectStatus != TRUE)//还未连接服务器,现在连接
			{
				// Windows Sockets 动态库的初始化
				InitDll(hWnd);
				//创建SOCKET
				InitSocket(clientSocket, hWnd);
				// 连接服务器
				connectServer(hWnd);
			}
			if(connectStatus != TRUE)
			{
				mySetWindowText("连接服务器失败");
				break;
			}
			break;
		case IDB_BUTTON_SEND:
		{
			if (connectStatus == FALSE)
			{
				mySetWindowText("还没连接,别乱发数据");
				break;
			}
			// 设置和获取文本框里的内容
			TCHAR editTextBuffer[MAX_NUM_BUF];
			memset(editTextBuffer,0,MAX_NUM_BUF);
			GetWindowText(sendEditHwnd, editTextBuffer, MAX_NUM_BUF);
			int ret = sendLine(clientSocket, editTextBuffer, hWnd);
			if (SOCKET_ERROR == ret)
			{
				mySetWindowText("发送失败");
				break;
			}
			break;
		}
		case IDB_BUTTON_CLOSE:
		{
			// 如果已经关闭 不作反应
			if (connectStatus == FALSE)
			{
				mySetWindowText("client has stopped");
				break;
			}
			sendLine(clientSocket, "close", hWnd);
			int ret = closeService(clientSocket);
			if(SOCKET_ERROR == ret)
			{
				mySetWindowText("client closesocket fail");
				break;
			}else if (TRUE == ret)
			{
				mySetWindowText("客户端关闭socket成功");
				break;
			} 
			mySetWindowText("服务器关闭不成功,但是怎么失败的我也不知道");
			break;
		}
			
		default:
			return DefWindowProc(hWnd, message, wParam, lParam);
		}
		break;

	case WM_LBUTTONDOWN:
		{
			// 设置和获取文本框里的内容
			/*
			TCHAR editTextBuffer[MAX_NUM_BUF];
			GetWindowText(receiveEditHwnd, editTextBuffer, MAX_NUM_BUF);
			HDC hdc = GetDC(hWnd);
			TCHAR newTextStr[MAX_NUM_BUF];
			wsprintf(newTextStr,TEXT("%s - %s"),editTextBuffer,"receiveEditHwnd");
			SetWindowText(receiveEditHwnd, newTextStr);
			*/
		
			break;
		}
		
	case WM_CREATE:
		{
			receiveEditHwnd = CreateWindow("edit", NULL,
				WS_CHILD | WS_VISIBLE | WS_BORDER | ES_AUTOHSCROLL | ES_MULTILINE ,
				30, 80, 300, 200, hWnd, (HMENU)HMENU_ID, ((LPCREATESTRUCT) lParam) -> hInstance, NULL);
	
			sendEditHwnd = CreateWindow("edit", NULL,
				WS_CHILD | WS_VISIBLE | WS_BORDER | ES_AUTOHSCROLL | ES_MULTILINE ,
				30, 370, 300, 50, hWnd, (HMENU)HMENU_ID, ((LPCREATESTRUCT) lParam) -> hInstance, NULL);

			ipEditHwnd = CreateWindow("edit", TEXT("192.168.1.101"),
				WS_CHILD | WS_VISIBLE | WS_BORDER | ES_AUTOHSCROLL | ES_MULTILINE ,
				50, 430, 130, 30, hWnd, (HMENU)HMENU_ID, ((LPCREATESTRUCT) lParam) -> hInstance, NULL);
			
			portEditHwnd = CreateWindow("edit", TEXT("5419"),
				WS_CHILD | WS_VISIBLE | WS_BORDER | ES_AUTOHSCROLL | ES_MULTILINE ,
				240, 430, 60, 30, hWnd, (HMENU)HMENU_ID, ((LPCREATESTRUCT) lParam) -> hInstance, NULL);
			
			buttonConnect = CreateWindow("button", TEXT("连接服务"),
				WS_CHILD | WS_VISIBLE | WS_BORDER  ,
				30, 470, 90, 30, hWnd, (HMENU)IDB_BUTTON_CONNECT, ((LPCREATESTRUCT) lParam) -> hInstance, NULL);

			buttonSend = CreateWindow("button", TEXT("发送数据"),
				WS_CHILD | WS_VISIBLE | WS_BORDER  ,
				130, 470, 90, 30, hWnd, (HMENU)IDB_BUTTON_SEND, ((LPCREATESTRUCT) lParam) -> hInstance, NULL);

			buttonClose = CreateWindow("button", TEXT("断开服务"),
				WS_CHILD | WS_VISIBLE | WS_BORDER  ,
				230, 470, 90, 30, hWnd, (HMENU)IDB_BUTTON_CLOSE, ((LPCREATESTRUCT) lParam) -> hInstance, NULL);

			buttonHwnd = CreateWindow("button", TEXT("B"),
				WS_CHILD | WS_VISIBLE | WS_BORDER  ,
				240, 10, 30, 20, hWnd, (HMENU)IDB_BUTTON, ((LPCREATESTRUCT) lParam) -> hInstance, NULL);

			break;
		}
	case WM_PAINT:
		hdc = BeginPaint(hWnd, &ps);
		// TODO: 在此添加任意绘图代码...
		EndPaint(hWnd, &ps);
		break;
	case WM_DESTROY:
		PostQuitMessage(0);
		break;
	default:
		return DefWindowProc(hWnd, message, wParam, lParam);
	}
	return 0;
}