想做一个开机启动的Windows服务程序,开机就运行,然后初始化socket等工作并与一个客服端(已经在wait中的)建立连接,然后能够简单的通信,相当于客服端可以接受到其发送的信息,相当于客服端监控这个服务端,当然该本地的Windows服务程序时没有界面的,可以在服务中看到,不能再进程中看到,是不是可以用ATL创建一个Windows服务程序,大家能不能给我说说这方面的思路……
public:
HRESULT RegisterServer(BOOL bRegTypeLib, BOOL bService);
HRESULT UnregisterServer();
void Init(_ATL_OBJMAP_ENTRY* p, HINSTANCE h, UINT nServiceNameID, const GUID* plibid = NULL);
void Start();
void ServiceMain(DWORD dwArgc, LPTSTR* lpszArgv);
void Handler(DWORD dwOpcode);
void Run();
BOOL IsInstalled();
BOOL Install();
BOOL Uninstall();
LONG Unlock();
void LogEvent(LPCTSTR pszFormat, ...);
void SetServiceStatus(DWORD dwState);
void SetupAsLocalServer();
void Adder();
//Implementation
private:
static void WINAPI _ServiceMain(DWORD dwArgc, LPTSTR* lpszArgv);
static void WINAPI _Handler(DWORD dwOpcode);// data members
public:
TCHAR m_szServiceName[256];
SERVICE_STATUS_HANDLE m_hServiceStatus;
SERVICE_STATUS m_status;
DWORD dwThreadID;
BOOL m_bService; 在ATL建立的这个CServiceModule类中,在哪里来添加socket等相关初始化,建立连接,接受客服端接受的命令等的信息呢……
非常的感谢……
public:
HRESULT RegisterServer(BOOL bRegTypeLib, BOOL bService);
HRESULT UnregisterServer();
void Init(_ATL_OBJMAP_ENTRY* p, HINSTANCE h, UINT nServiceNameID, const GUID* plibid = NULL);
void Start();
void ServiceMain(DWORD dwArgc, LPTSTR* lpszArgv);
void Handler(DWORD dwOpcode);
void Run();
BOOL IsInstalled();
BOOL Install();
BOOL Uninstall();
LONG Unlock();
void LogEvent(LPCTSTR pszFormat, ...);
void SetServiceStatus(DWORD dwState);
void SetupAsLocalServer();
void Adder();
//Implementation
private:
static void WINAPI _ServiceMain(DWORD dwArgc, LPTSTR* lpszArgv);
static void WINAPI _Handler(DWORD dwOpcode);// data members
public:
TCHAR m_szServiceName[256];
SERVICE_STATUS_HANDLE m_hServiceStatus;
SERVICE_STATUS m_status;
DWORD dwThreadID;
BOOL m_bService; 在ATL建立的这个CServiceModule类中,在哪里来添加socket等相关初始化,建立连接,接受客服端接受的命令等的信息呢……
非常的感谢……
C#更便于这方面的开发吧,建议楼主试试
注意几点:
1.需长时间运行的操作还是开线程来做吧,要不在服务模式下很容易产生意想不到的错误
2.不能上来就尝试连接服务器,需要先检查本地网络设置,DHCP分配的IP是否可用等等