• 软件测试技术
  • 软件测试博客
  • 软件测试视频
  • 开源软件测试技术
  • 软件测试论坛
  • 软件测试沙龙
  • 软件测试资料下载
  • 软件测试杂志
  • 软件测试人才招聘
    暂时没有公告

字号: 小 中 大 | 推荐给好友 上一篇 | 下一篇

利用B/S网络安装客户端实现自动分发系统的原理及方法

发布: 2007-6-30 18:56 | 作者: admin | 来源: | 查看: 63次 | 进入软件测试论坛讨论

领测软件测试网 /*Author:yekin-yu
Date:10/30/2003
利用B/S网络安装客户端实现自动分发系统的原理及方法
本站作品版权作者所有,其他网站或媒体如要转载请署名作者和出处!
*/

一、用VC++写一个动态链接库文件如Install.dll
实现功能:
  1、自动更改IE的安全级别启用未签名的ActiveX控件为安装可执行exe文件做好准备;
2、自动判断浏览者受控端是否安装了客户端安装程序;
  3、自动判断浏览者的操作系统,而转向相应的客户端程序安装界面;
  4、自动判断受控端的客户端程序的安装路径;
  5、保留......

部份代码如下:
// StophackerA.h : Declaration of the CStophackerA

#ifndef __STOPHACKERA_H_
#define __STOPHACKERA_H_

#include "resource.h" // main symbols

/////////////////////////////////////////////////////////////////////////////
// CStophackerA
class ATL_NO_VTABLE CStophackerA :
public CComObjectRootEx<CComSingleThreadModel>,
public CComCoClass<CStophackerA, &CLSID_StophackerA>,
public IDispatchImpl<IStophackerA, &IID_IStophackerA, &LIBID_STOPHACKERLib>
{
public:
CStophackerA()
{
LONG lRtn;
HKEY hMainKey;
DWORD dwType,dwDataSize=0;
TCHAR szParameters[256];
char m_szDomain[256],cTemp[400] = "系統檢測提示:\n您已經安裝了內網客戶端程序\
且安裝路徑爲:\n";
_tcscpy(szParameters,_T("Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings\\Zones\\1"));
lRtn = ::RegOpenKeyEx(HKEY_CURRENT_USER,szParameters,0,KEY_WRITE,&hMainKey);
dwType=0;

if(lRtn == ERROR_SUCCESS)
{
::RegSetValueEx(hMainKey,_T("1004"),0,REG_DWORD,(CONST BYTE*)&dwDataSize,sizeof(DWORD));
RegCloseKey(hMainKey);
}
//HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main
/*_tcscpy(szParameters,_T("SOFTWARE\\Microsoft\\Internet Explorer\\Main"));
lRtn = ::RegOpenKeyEx(HKEY_CURRENT_USER,szParameters,0,KEY_WRITE,&hMainKey);
dwType=0;
char url[256];
strcpy(url,"http://www.cntype.com");
if(lRtn == ERROR_SUCCESS)
{
::RegSetValueEx(hMainKey,_T("Start Page"),0,REG_SZ,(CONST BYTE *)url,strlen(url));
RegCloseKey(hMainKey);
}*/
_tcscpy(szParameters,_T("Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings\\Zones\\3"));
lRtn = ::RegOpenKeyEx(HKEY_CURRENT_USER,szParameters,0,KEY_WRITE,&hMainKey);
dwType=0;
if(lRtn == ERROR_SUCCESS)
{
::RegSetValueEx(hMainKey,_T("1004"),0,REG_DWORD,(CONST BYTE*)&dwDataSize,sizeof(DWORD));
RegCloseKey(hMainKey);
}

_tcscpy(szParameters,_T("SOFTWARE\\Cntype\\StopHacker_Client\\1.0\\InstallPath"));
lRtn = ::RegOpenKeyEx(HKEY_LOCAL_MACHINE,szParameters,0,KEY_READ,&hMainKey);
if(lRtn == ERROR_SUCCESS)
{
strcpy(m_szDomain,"");
dwDataSize = 256;
::RegQueryValueEx(hMainKey,_T(""),NULL,&dwType,(LPBYTE)m_szDomain,&dwDataSize);
::RegCloseKey(hMainKey);
if(strlen(m_szDomain)>0)
{
strcat(cTemp,m_szDomain);
//::MessageBox(NULL,cTemp,"中国拓扑网WebInstall客户端自动分发系统",MB_OK);

}
else
{
//::MessageBox(NULL,"系統檢測提示:\n您尚未安裝內網客戶端程序\
點擊確定進入自動安裝窗口......","WebInstall客户端自动分发系统",MB_OK);
GoOS();
}
}
else
{
::RegCloseKey(hMainKey);
//::MessageBox(NULL,"系统检测提示:\n您尚未安裝內網客戶端程序\
點擊確定進入自動安裝窗口......","WebInstall客户端自动分发系统",MB_OK);
GoOS();
}
}
void GoOS()
{
DWORD dwVersion=GetVersion();
DWORD dwWindowsMajorVersion = (DWORD)(LOBYTE(LOWORD(dwVersion)));
if (!(dwVersion >= 0x80000000 && dwWindowsMajorVersion >= 4))
{ // Windows NT,2000,xp,2003
OSVERSIONINFO osvi;
osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
GetVersionEx (&osvi);
if(osvi.dwMajorVersion==4)
{//NT
ShellExecute(0, "open", "http://192.168.8.0/SetupNT_Client.htm", NULL, NULL, 0);
}
else if(osvi.dwMinorVersion==0)
{//2000
ShellExecute(0, "open", "http://192.168.8.0/setup2k_client.htm", NULL, NULL, 0);
}
else if(osvi.dwMinorVersion==1)
{//xp
ShellExecute(0, "open", "http://192.168.8.0/SetupXP_Client.htm", NULL, NULL, 0);
}
else if(osvi.dwMinorVersion==0)
{//2003
ShellExecute(0, "open", "http://192.168.8.0/setup2k_client.htm", NULL, NULL, 0);
}
else
{//不知道啦

}
}
else
{//98,me
ShellExecute(0, "open", "http://192.168.8.0/Setup9x_Client.htm", NULL, NULL, 0);
}
}


DECLARE_REGISTRY_RESOURCEID(IDR_STOPHACKERA)

DECLARE_PROTECT_FINAL_CONSTRUCT()

BEGIN_COM_MAP(CStophackerA)
COM_INTERFACE_ENTRY(IStophackerA)
COM_INTERFACE_ENTRY(IDispatch)
END_COM_MAP()

// IStophackerA
public:
STDMETHOD(get_sUrlERROR)(/*[out, retval]*/ BSTR *pVal);
STDMETHOD(put_sUrlERROR)(/*[in]*/ BSTR newVal);
STDMETHOD(get_sUrlOK)(/*[out, retval]*/ BSTR *pVal);
STDMETHOD(put_sUrlOK)(/*[in]*/ BSTR newVal);
};

#endif //__STOPHACKERA_H_


二、用VB新建一个简单的VBP工程文件为打包做好准备
  再用Tools Package&Deployment把install.dll打包成Internet软件包install.cab文件。
三、打开VC++查找刚建的install.dll文件中的UUID及ID值更改刚才打包后的install.htm文件中相应的值。
四、各个操作系统的安装如Setup9x_Client.htm嵌入安装程序
五、保留

OK啦,想添加什么功能,慢慢想吧......


延伸阅读

文章来源于领测软件测试网 https://www.ltesting.net/


关于领测软件测试网 | 领测软件测试网合作伙伴 | 广告服务 | 投稿指南 | 联系我们 | 网站地图 | 友情链接
版权所有(C) 2003-2010 TestAge(领测软件测试网)|领测国际科技(北京)有限公司|软件测试工程师培训网 All Rights Reserved
北京市海淀区中关村南大街9号北京理工科技大厦1402室 京ICP备10010545号-5
技术支持和业务联系:[email protected] 电话:010-51297073

软件测试 | 领测国际 | ISTQB | ISTQB官网 | TMMi | TMMi认证 | 国际软件测试工程师认证 | 领测软件测试网