当前位置:编程学习 > asp >>

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

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


上一个:aspTemplate : 类似 phpLib::Template 的分离层实现
下一个:如何使用ASP产生象安装向导的主页

CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,