- 浏览: 864044 次
- 性别:
- 来自: 济南
文章分类
- 全部博客 (280)
- java相关 (29)
- linux系统 (55)
- ipsec (0)
- ssl (3)
- 信息安全 (13)
- web相关 (35)
- windows (9)
- c,c++ (14)
- log4j (3)
- hibernate (8)
- sqlite (1)
- 程序人生 (2)
- js (2)
- 生活点滴 (3)
- 网络相关 (14)
- 问题积累 (15)
- 数据库相关 (27)
- 软件测试 (2)
- PKI相关 (2)
- 程序设计 (7)
- 犄角旮旯 (0)
- 杂七杂八 (0)
- 硬件相关 (14)
- 防火墙 (2)
- 电子商务 (2)
- 多媒体相关 (1)
- 内存管理 (4)
- 面向对象 (1)
- csp (1)
- 驱动开发 (3)
- 移动开发 (2)
- openssl多线程实例 (1)
最新评论
-
xiaoyao3857:
博主很有探索精神嘛,学习了
Linux主机名Hostname详解 -
hiskyrisa:
言简意赅,好文章。
Flex是什么 -
layznet:
犯了类似错误。使用的是derby数据库。driverClass ...
java.sql.SQLException: No suitable driver -
idision:
你好,文章有一句createSubjectKeyId(keyT ...
bouncycastle 产生证书 -
zheng12tian:
代码有全的不?只贴一部分,,,,
在LOG4J中把日志写入远程数据库
首先,想要在客户端直接执行服务器端的程序,必须做一个ActiveX控件(或者有个打包好的CAB文件也行),为的是能够用网页object。看到以前有高手说过,可以写一个没有任何功能的ActiveX控件,小的认为,如果这样的话,客户机的IE安全设置级别高的话,这个ActiveX控件就很难运行。如果想突破安全级别的限制的话,就必须在控件上下功夫。至于能突破安全级别的控件如何编写,小的在后面再介绍。
其实想直接运行安装程序,也可以不要ActiveX控件,只要一个安装文件就行(和匹配的INF文件),但是,如果这样,就必须使客户机的安全级别降到最低,或者把IE中安全选项:下载未签名的ActiveX,改成启用/提示。
假设现在我们有一个控件了(DLoad.ocx),除了你想在客户机上运行的Setup.exe文件我们还需要一个Setup.inf文件。这个inf文件如何编写,请看下面的例子:
[version]
signature="$CHICAGO$"
AdvancedINF=2.0
[Add.Code]
DLoad.ocx=DLoad.ocx
mfc42.dll=mfc42.dll
msvcrt.dll=msvcrt.dll
olepro32.dll=olepro32.dll
setup.exe=setup.exe
[DLoad.ocx]
file-win32-x86=thiscab
clsid={68ADAF59-76C1-4561-A45A-867F43545237}
FileVersion=1,0,0,1
RegisterServer=yes
[msvcrt.dll]
FileVersion=6,0,8168,0
hook=mfc42installer
[mfc42.dll]
FileVersion=6,0,8168,0
hook=mfc42installer
[olepro32.dll]
FileVersion=5,0,4261,0
hook=mfc42installer
[mfc42installer]
file-win32-x86=VALUE=mfc42.cab
run= %EXTRACT_DIR% \mfc42.exe
[dotnetfx.exe]
file=thiscab
RegisterServer=yes
[Setup Hooks]
hook=setup
[setup]
run=%EXTRACT_DIR%\setup.exe
以上控件是使用Visual C++6.0编写的
这里需要说明的是上述msvcrt.dll、mfc42.dll、olepro32.dll的FileVersion是根
据VC不同的版本而异的,例如在VC5.0sp3中就应该如下
olepro32.dll 5,0,4230,1
mfc42.dll 4,21,0,7303
msvcrt.dll 5,0,0,7303
每个VC版本都有不同的版本号,这里只介绍常见的两种。
这里的clsid是从那得到的呢?是在你生成OCX的目录中.odl文件中得到的,注意,
打开这个文件后,我们可以看到四个clsid,最上面那个带有Version值的才是我们
需要的。这个clsid非常重要,它最终会注册到注册表里,提供版本的验证功能。只
有当程序发现你的注册表里没有这个clsid的时候,它才会自动安装。如果你安装了
一次,再安装一次的话,安装包(CAB)会发现注册表里有了这个clsid,它就不会
重复安装了。在mfc42installer里的mfc42.cab文件是需要下载的,下载地址:
http://activex.microsoft.com/controls/vc/mfc42.cab
另外mfc42installer的下载路径除了VC4.1和更早版本使用
http://activex.microsoft.com/controls/vc/mfc40.cab外,其他版本都使用
http://activex.microsoft.com/controls/vc/mfc42.cab。
下载完之后,把这个文件放在你的执行目录下就行了。
在这个inf例子中,包含了DLoad.ocx和setup.exe两个文件的信息。如果只单纯
执行OCX文件,他有关setup.exe的信息剔除就行了。
我们的inf文件编写完成,下面我们就要进行最重要的一步工作,把这些文件打
包成一个CAB文件。可以用VB和VS7.0自带的打包工具。不过我推荐使用WinCAB。这
个工具网上到处都有下载,不过下载安装完成之后,必须把Makecab.exe拷贝到
WinCAB的安装目录下才可运行,Makecab.exe文件在C:\WINNT\system32里。
CAB工具的使用方法:
(1)启动WinCAB,然后执行"Cabinet"菜单的"New"命令或单击快捷工具栏上的
"New cabinet"按钮,准备制作新的CAB压缩包。
(2)单击快捷工具栏上的"Add file(s) to cabinet"按钮,打开"Add file(s)
to cabinet"对话框。
(3)选择欲添加到CAB压缩包中的文件后单击"打开"按钮,将它们添加到WinCAB
的文件列表中。这里只需要添加YourCtl.ocx和YourCtl.inf两个文件。
(4)在WinCAB快捷工具栏的"Cabinet path and name"框中输入或利用"Browse
for path and name"按钮指定CAB压缩包的路径及文件名。
(5)在"Cabinet size"栏中指定CAB压缩包的尺寸。
(6)在"Compression method"框中选择合适的压缩方式。
(7)单击"Save cabinet"按钮,WinCAB即会按照用户的要求进行压缩。
(8)压缩完成后,WinCAB会给出一个"WinCAB Report"的报告框,向广大用户报
告有关文件个数、压缩前后的文件尺寸、压缩率、压缩时间等情况。至此,一个CAB
文件就生成了。
打包完成之后,我们要在网页中调用它了。
<OBJECT classid=clsid:68ADAF59-76C1-4561-A45A-867F43545237
codeBase=http://127.0.0.1/web/setup.cab#version=1,0,0,0>
<PARAM NAME="Setup" VALUE="http://127.0.0.1/web/DLoad.ocx">
</OBJECT>
现在可以马上进行测试,不过要把IE中的安全选项:下载未签名的ActiveX,改成启
用/提示。最好找台没有装3721上网助手(类似软件)的机器上测试。
以上控件的执行有很大局限性,如果安全级别高的话,就很难通过。所以现在介绍
如何突破IE安全级别限制的控件编写。
要包括两个文件
#include "comcat.h"
#include "Objsafe.h"
// 本控件的CLSID,注册表用
const GUID CDECL CLSID_SafeItem =
{ 0x7AE7497B, 0xCAD8, 0x4E66, {
0xA5,0x8B,0xDD,0xE9,0xBC,0xAF,0x6B,0x61 } };
// 创建组件种类
HRESULT createComponentCategory(CATID catid, WCHAR* catDescription)
{
ICatRegister* pcr = NULL ;
HRESULT hr = S_OK ;
hr = CocreateInstance(CLSID_StdComponentCategoriesMgr,
NULL, CLSCTX_INPROC_SERVER, IID_ICatRegister, (void**)&pcr);
if (FAILED(hr))
return hr;
// Make sure the HKCR\Component Categories\{..catid...}
// key is registered.
CATEGORYINFO catinfo;
catinfo.catid = catid;
catinfo.lcid = 0x0409 ; // english
// Make sure the provided description is not too long.
// Only copy the first 127 characters if it is.
int len = wcslen(catDescription);
if (len>127)
len = 127;
wcsncpy(catinfo.szDescription, catDescription, len);
// Make sure the description is null terminated.
catinfo.szDescription[len] = ''\0'';
hr = pcr->RegisterCategories(1, &catinfo);
pcr->Release();
return hr;
}
// 注册组件种类
HRESULT RegisterCLSIDInCategory(REFCLSID clsid, CATID catid)
{
// Register your component categories information.
ICatRegister* pcr = NULL ;
HRESULT hr = S_OK ;
hr = CocreateInstance(CLSID_StdComponentCategoriesMgr,
NULL, CLSCTX_INPROC_SERVER, IID_ICatRegister,
(void**)&pcr);
if (SUCCEEDED(hr))
{
// Register this category as being "implemented" by the class.
CATID rgcatid[1] ;
rgcatid[0] = catid;
hr = pcr->RegisterClassImplCategories(clsid, 1, rgcatid);
}
if (pcr != NULL)
pcr->Release();
return hr;
}
// 卸载组件种类
HRESULT UnRegisterCLSIDInCategory(REFCLSID clsid, CATID catid)
{
ICatRegister* pcr = NULL ;
HRESULT hr = S_OK ;
hr = CocreateInstance(CLSID_StdComponentCategoriesMgr,
NULL, CLSCTX_INPROC_SERVER, IID_ICatRegister, (void**)&pcr);
if (SUCCEEDED(hr))
{
// Unregister this category as being "implemented" by the class.
CATID rgcatid[1] ;
rgcatid[0] = catid;
hr = pcr->UnRegisterClassImplCategories(clsid, 1, rgcatid);
}
if (pcr != NULL)
pcr->Release();
return hr;
}
// DllRegisterServer - Adds entries to the system registry
STDAPI DllRegisterServer(void)
{
HRESULT hr;
AFX_MANAGE_STATE(_afxModuleAddrThis);
if (!AfxOleRegisterTypeLib(AfxGetInstanceHandle(), _tlid))
return ResultFromScode(SELFREG_E_TYPELIB);
if (!COleObjectFactoryEx::updateRegistryAll(TRUE))
return ResultFromScode(SELFREG_E_CLASS);
// 标记控件初始化安全.
// 创建初始化安全组件种类
hr = createComponentCategory(CATID_SafeForInitializing, L"Controls
safely initializable from persistent data!";
if (FAILED(hr))
return hr;
// 注册初始化安全
hr = RegisterCLSIDInCategory(CLSID_SafeItem,
CATID_SafeForInitializing);
if (FAILED(hr))
return hr;
// 标记控件脚本安全
// 创建脚本安全组件种类
hr = createComponentCategory(CATID_SafeForScripting, L"Controls
safely scriptable!";
if (FAILED(hr))
return hr;
// 注册脚本安全组件种类
hr = RegisterCLSIDInCategory(CLSID_SafeItem, CATID_SafeForScripting);
if (FAILED(hr))
return hr;
return NOERROR;
}
// DllUnregisterServer - Removes entries from the system registry
STDAPI DllUnregisterServer(void)
{
HRESULT hr;
AFX_MANAGE_STATE(_afxModuleAddrThis);
if (!AfxOleUnregisterTypeLib(_tlid, _wVerMajor, _wVerMinor))
return ResultFromScode(SELFREG_E_TYPELIB);
if (!COleObjectFactoryEx::updateRegistryAll(FALSE))
return ResultFromScode(SELFREG_E_CLASS);
// 删除控件初始化安全入口.
hr=UnRegisterCLSIDInCategory(CLSID_SafeItem,
CATID_SafeForInitializing);
if (FAILED(hr))
return hr;
// 删除控件脚本安全入口
hr=UnRegisterCLSIDInCategory(CLSID_SafeItem, CATID_SafeForScripting);
if (FAILED(hr))
return hr;
//////////////////////////
return NOERROR;
}
发表评论
-
VC中简单操作注册表
2010-09-19 14:30 2609本文只是对注册表实现简单的打开、创建、读、写、关闭操作,故只是 ... -
Activex控件在IE中也可以不显示安全提示
2010-09-17 17:08 2808转csdn网友shepherds() 在class ... -
U 盘加载,卸载,拔出,插入,WM_DEVICECHANGE,WndProc,DBT_DEVICEARRIVAL,DBT_DEVICEREMOVECOMPLE
2010-05-25 21:17 5675最近在做一个和U盘有关的项目,有一个需求是要求显示插入的U盘的 ... -
DeviceIoControl的使用说明
2010-05-25 17:39 1762应用程序和驱动程序的通信过程是:应用程序使用Cr ... -
Enable3dControls()和Enable3dControlsStatic()函数简介
2010-05-25 09:44 3318Enable3dControls()和Enable3dCont ... -
CString,string,char* 之间的转换
2010-05-24 11:49 1345这几天经常用到的,不如记下吧。 这三种类型各有各的优点, ... -
_cdecl 和_stdcall
2009-08-04 17:12 1397_cdecl 是C Declaration的缩 ... -
指针和数组之区别
2009-07-25 20:00 3175数组名可以当作一个指针来用,数组名可以用*取其中的值,指针也可 ... -
c++内存管理
2009-06-29 10:12 11041. void GetMemory(char *p) { ... -
C++ Primer中文版(第4版) 随书源码
2009-06-07 22:08 2161MS_files.zip for windows using ... -
#include "" 和#include <> 区别问题
2009-06-07 21:02 1094clude ""是先从本地目录开始寻找 ... -
std::cout 与\n
2009-06-07 19:53 1893#includ<iostream> int mai ... -
逗号运算符
2009-05-18 11:40 1349C 语言中,逗号(,)也可以是运算符,称为逗号运算符(Comm ...
相关推荐
在IT领域,尤其是在Web开发中,"web服务器端调用客户端可执行文件"是一个涉及到多个技术栈的概念。这个过程通常涉及到服务器与客户端之间的交互,利用JavaScript、PHP等技术来实现。下面将详细解释这一主题。 首先...
这是一个可执行文件,包含了自动安装IIS所需的所有步骤和配置。用户只需双击该文件,根据提示进行操作,即可开始安装过程。这个便携式安装包可能已经包含了必要的IIS组件,如默认文档处理、ASP.NET支持、FTP服务等,...
Web服务器主要任务是接收来自客户端(如浏览器)的HTTP请求,解析请求中的信息,如URL、HTTP方法(GET、POST等),然后根据请求内容执行相应的操作,如读取静态文件或触发动态脚本。最后,Web服务器会将处理结果封装...
总之,"tomcat7.0.23exe可执行文件安装版"为Windows用户提供了一个快速安装Apache Tomcat 7.0.23的途径,尽管这个版本可能不适合最新技术的需求,但对于那些需要旧版本兼容性的项目,它仍然是一个实用的选择。...
5. **性能优化**: 针对大量文件下载或高并发访问,可能需要优化HFS的性能,例如开启缓存、使用更快的硬件、优化网络带宽等。 6. **日志和监控**: HFS提供的日志功能可以帮助监控服务器的活动,如访问记录、错误信息...
在提供的压缩包文件列表中,"FTPUpDownloader"可能是这个FTP客户端工具的安装程序或可执行文件,用户可以通过运行这个文件来安装和使用FTPUpDownloader。安装后,用户可以配置服务器连接信息,设置上传和下载的参数...
"WEB项目自动化编译文件"指的是用于自动执行构建过程的配置文件和脚本,它们通常包括了一系列的任务,如源代码的编译、资源文件的处理、依赖库的管理、测试的执行以及最终产品的打包等。在提供的文件名中,`build....
- **bin**:包含可执行文件和脚本,如`startup.sh`和`shutdown.sh`,用于启动和停止Tomcat服务器。 - **conf**:存储所有配置文件,如`server.xml`定义了服务器的全局配置,`web.xml`是默认的部署描述符。 - **lib**...
在Linux系统上搭建Web服务器,可以提供更稳定、高效的服务,并且具有高度的可定制性。在Linux发行版中,Apache是一个广泛应用且功能强大的开源Web服务器软件,与Linux系统的兼容性极佳。 **4.1 选择和安装Apache** ...
"Web服务器本地测试工具"允许用户对文件内容进行测试。这意味着你可以上传你的HTML、CSS、JavaScript或者其他动态脚本文件到这个工具中,查看它们在服务器环境下的运行效果。这对于前端开发者调试网页布局、样式和...
标题 "IIS各版本的自动安装bat文件" 涉及到的是Windows操作系统中的Internet Information Services(IIS)的不同版本的自动化安装过程。IIS是一个功能强大的Web服务器,由微软公司开发,常用于托管网站、应用程序和...
在ASP(Active Server Pages)中调用客户端的EXE可执行文件是一个相对复杂的过程,因为出于安全考虑,浏览器和Web服务器通常不允许直接执行客户端的本地程序。然而,如果你需要实现这样的功能,例如为了自动化某些...
描述中的"WEB服务器IIS便携自动安装包WEBIIS"与标题一致,进一步强调了这个安装包的主要特点:便携性和自动化。这通常是为了方便IT管理员或开发者在不同环境中快速部署和测试Web服务,或者在教学、演示等场合快速...
在IT行业中,Web服务器性能调优是至关重要的,它直接影响着网站的响应速度、稳定性和用户体验。本压缩包文件集中了多个文档,专门探讨了针对WebLogic和Tomcat这两个广泛应用的Java Web服务器的性能优化策略。 首先...
2. 配置环境变量:安装完成后,确保 Node.js 的可执行文件路径已添加到系统环境变量中,以便在命令行中直接运行 `node` 和 `npm` 命令。 二、快速创建 Web 服务器 1. 创建项目文件夹:新建一个目录,比如命名为 ...
- **执行权限**: 选择合适的执行权限,通常建议使用“脚本和可执行文件”。 - **文档**: 设置网站的默认首页文件,如`index.asp`、`index.htm`等。 - **目录安全性**: 设置访问控制和身份验证规则。 5. **部署...
### RESTful文件下载方法解析 #### 一、概述 在现代Web应用开发中,REST(Representational State Transfer)架构风格因其简洁性和可扩展性而受到广泛欢迎。RESTful API不仅适用于传统的网页请求,还适用于文件...