/*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啦,想添加什么功能,慢慢想吧……