用vb做了一个OCX,打包后无法下载安装

majten 2011-05-31 12:23:38
用VB6做了一个OCX,给html页面中使用,用vb6打包工具打包后,又修改了xxx.inf里相应的路径重新打包。
在机器上测试的情况是:降低了浏览器的安全级别,虽然有提示安全警告,但还可以点击“安装”进行安装。
奇怪的是点击了“安装”后好像并没有进行安装,刷新页面后还是这个安全告警提示。搜索windows文件夹后,发现没有我写的那个OCX文件。


请问这是为什么,如何处理?

另,测试机是从微软下载的纯净的XP虚拟机,
...全文
189 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
simon__sun 2011-05-31
  • 打赏
  • 举报
回复
http://wenku.baidu.com/view/55348421af45b307e8719758.html

看看这个吧
majten 2011-05-31
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 simon__sun 的回复:]
把CAB发上来看看
[/Quote]

下载地址:
http://www.rayfile.com/zh-cn/files/d39a2845-8b35-11e0-aba2-0015c55db73d/
simon__sun 2011-05-31
  • 打赏
  • 举报
回复
把CAB发上来看看
majten 2011-05-31
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 majten 的回复:]
引用 11 楼 simon__sun 的回复:
有可能电脑上有安全软件给你屏弊了 犹其是360这种


测试机上没有装任何安全软件,完全是“裸机”
[/Quote]

是不是必须加入签名才行?
更新了新的classid和versionh还是不行
打包使用vb6里“外接程序”-》“打包和展开向导”做的,在vb里调试可以,但真正发布就不行了,快郁闷死了
toury 2011-05-31
  • 打赏
  • 举报
回复
重新编译一下ocx,改变版本号,然后再试试。如果还是不行,怀疑你的cab安装包没做好

majten 2011-05-31
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 simon__sun 的回复:]
有可能电脑上有安全软件给你屏弊了 犹其是360这种
[/Quote]

测试机上没有装任何安全软件,完全是“裸机”
simon__sun 2011-05-31
  • 打赏
  • 举报
回复
有可能电脑上有安全软件给你屏弊了 犹其是360这种
majten 2011-05-31
  • 打赏
  • 举报
回复

<HTML>
<HEAD>
<TITLE>FTPUpload.CAB</TITLE>
</HEAD>
<BODY>
<!-- 如果这页上的任何控件需要授权,您必须
创建一个授权包文件。 运行 LPK_TOOL.EXE 来创建
要求的 LPK 文件。 LPK_TOOL.EXE 将从 ActiveX SDK 中找到,
http://www.microsoft.com/intdev/sdk/sdk.htm. 如果您有 Visual
Basic 6.0 CD, 您可以在\Tools\LPK_TOOL 目录下找到它。

下面是对象标记的例子:

<OBJECT CLASSID="clsid:5220cb21-c88d-11cf-b347-00aa00a28331">
<PARAM NAME="LPKPath" VALUE="LPKfilename.LPK">
</OBJECT>
-->

<OBJECT ID="FTPUploa_Ui"
CLASSID="CLSID:57A99F0F-712D-4B0C-AD80-134AFD64D528"
CODEBASE="http://192.168.254.116:806/FTPUpload.CAB#version=1,0,0,0,">
</OBJECT>
</BODY>
</HTML>



上面代码测试过了,还是老样子。


代码中的guid、version应该是对的,没有手动该工,并且与 ftpupload.inf里的信息一致

[FTPUpload.ocx]
file-win32-x86=thiscab
RegisterServer=yes
clsid={57A99F0F-712D-4B0C-AD80-134AFD64D528}
DestDir=11
FileVersion=1,0,0,0
simon__sun 2011-05-31
  • 打赏
  • 举报
回复
可以让控件变成安全控件方法 不知道现在还好用不
添加一模块:basSafeCtl 内容:
 Option Explicit

Public Const IID_IDispatch = "{00020400-0000-0000-C000-000000000046}"
Public Const IID_IPersistStorage = _
"{0000010A-0000-0000-C000-000000000046}"
Public Const IID_IPersistStream = _
"{00000109-0000-0000-C000-000000000046}"
Public Const IID_IPersistPropertyBag = _
"{37D84F60-42CB-11CE-8135-00AA004BB851}"

Public Const INTERFACESAFE_FOR_UNTRUSTED_CALLER = &H1
Public Const INTERFACESAFE_FOR_UNTRUSTED_DATA = &H2
Public Const E_NOINTERFACE = &H80004002
Public Const E_FAIL = &H80004005
Public Const MAX_GUIDLEN = 40

Public Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" _
(pDest As Any, pSource As Any, ByVal ByteLen As Long)
Public Declare Function StringFromGUID2 Lib "ole32.dll" (rguid As _
Any, ByVal lpstrClsId As Long, ByVal cbMax As Integer) As Long

Public Type udtGUID
Data1 As Long
Data2 As Integer
Data3 As Integer
Data4(7) As Byte
End Type

Public m_fSafeForScripting As Boolean
Public m_fSafeForInitializing As Boolean

Sub Main()
m_fSafeForScripting = True
m_fSafeForInitializing = True
End Sub


在控件代码窗加入下面内容:
Private Sub IObjectSafety_GetInterfaceSafetyOptions(ByVal riid As _
Long, pdwSupportedOptions As Long, pdwEnabledOptions As Long)

Dim Rc As Long
Dim rClsId As udtGUID
Dim IID As String
Dim bIID() As Byte

pdwSupportedOptions = INTERFACESAFE_FOR_UNTRUSTED_CALLER Or _
INTERFACESAFE_FOR_UNTRUSTED_DATA

If (riid <> 0) Then
CopyMemory rClsId, ByVal riid, Len(rClsId)

bIID = String$(MAX_GUIDLEN, 0)
Rc = StringFromGUID2(rClsId, VarPtr(bIID(0)), MAX_GUIDLEN)
Rc = InStr(1, bIID, vbNullChar) - 1
IID = Left$(UCase(bIID), Rc)

Select Case IID
Case IID_IDispatch
pdwEnabledOptions = IIf(m_fSafeForScripting, _
INTERFACESAFE_FOR_UNTRUSTED_CALLER, 0)
Exit Sub
Case IID_IPersistStorage, IID_IPersistStream, _
IID_IPersistPropertyBag
pdwEnabledOptions = IIf(m_fSafeForInitializing, _
INTERFACESAFE_FOR_UNTRUSTED_DATA, 0)
Exit Sub
Case Else
Err.Raise E_NOINTERFACE
Exit Sub
End Select
End If
End Sub

Private Sub IObjectSafety_SetInterfaceSafetyOptions(ByVal riid As _
Long, ByVal dwOptionsSetMask As Long, ByVal dwEnabledOptions As Long)
Dim Rc As Long
Dim rClsId As udtGUID
Dim IID As String
Dim bIID() As Byte

If (riid <> 0) Then
CopyMemory rClsId, ByVal riid, Len(rClsId)

bIID = String$(MAX_GUIDLEN, 0)
Rc = StringFromGUID2(rClsId, VarPtr(bIID(0)), MAX_GUIDLEN)
Rc = InStr(1, bIID, vbNullChar) - 1
IID = Left$(UCase(bIID), Rc)

Select Case IID
Case IID_IDispatch
If ((dwEnabledOptions And dwOptionsSetMask) <> _
INTERFACESAFE_FOR_UNTRUSTED_CALLER) Then
Err.Raise E_FAIL
Exit Sub
Else
If Not m_fSafeForScripting Then
Err.Raise E_FAIL
End If
Exit Sub
End If

Case IID_IPersistStorage, IID_IPersistStream, _
IID_IPersistPropertyBag
If ((dwEnabledOptions And dwOptionsSetMask) <> _
INTERFACESAFE_FOR_UNTRUSTED_DATA) Then
Err.Raise E_FAIL
Exit Sub
Else
If Not m_fSafeForInitializing Then
Err.Raise E_FAIL
End If
Exit Sub
End If

Case Else
Err.Raise E_NOINTERFACE
Exit Sub
End Select
End If
End Sub

toury 2011-05-31
  • 打赏
  • 举报
回复
<OBJECT ID="FTPUploa_Ui"
CLASSID="CLSID:57A99F0F-712D-4B0C-AD80-134AFD64D528" //确保该值正确
CODEBASE="FTPUpload.CAB#version=1,0,0,0">
//试试全路径:http://.........../FTPUpload.CAB#Version=1,0,0,0"
//Version=1,0,0,0" //版本对吗?
//还是不行的话,试试:#version=1,0,0,0,<--------加个逗号
</OBJECT>
majten 2011-05-31
  • 打赏
  • 举报
回复

<HTML>
<HEAD>
<TITLE>FTPUpload.CAB</TITLE>
</HEAD>
<BODY>
<!-- 如果这页上的任何控件需要授权,您必须
创建一个授权包文件。 运行 LPK_TOOL.EXE 来创建
要求的 LPK 文件。 LPK_TOOL.EXE 将从 ActiveX SDK 中找到,
http://www.microsoft.com/intdev/sdk/sdk.htm. 如果您有 Visual
Basic 6.0 CD, 您可以在\Tools\LPK_TOOL 目录下找到它。

下面是对象标记的例子:

<OBJECT CLASSID="clsid:5220cb21-c88d-11cf-b347-00aa00a28331">
<PARAM NAME="LPKPath" VALUE="LPKfilename.LPK">
</OBJECT>
-->

<OBJECT ID="FTPUploa_Ui"
CLASSID="CLSID:57A99F0F-712D-4B0C-AD80-134AFD64D528"
CODEBASE="FTPUpload.CAB#version=1,0,0,0">
</OBJECT>
</BODY>
</HTML>



FTPUpload.CAB 和 这个html是在同个目录下。
toury 2011-05-31
  • 打赏
  • 举报
回复
晒html源码。你怎么引用这个OCX?
majten 2011-05-31
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 luofenghen 的回复:]
绝对路径 和相对路径的问题
/和没有/ 测试下吧
[/Quote]
测试过了,加和不加"/"没有变化,最后写成 http://10.1.1.10/test.cab 也不行(这个地址存在)



Quote=引用 3 楼 asftrhgjhkjlkttttttt 的回复:]
客户机的IE属性>安全>可信站点>站点里将服务器的ip地址输入,自定义级别里将所有含activex的选项设为 启用
另外OCX控件最好打包成Internet应用,包为.cab后缀的即可.
[/Quote]

按照以上步骤测试,还是老样子,弹出警告提示后有“安装”和“不安装”的按钮,但点击了“安装”后没有什么变化,OCX没有被安装到机器上,刷新后又出现了这个告警提示
孤独剑_LPZ 2011-05-31
  • 打赏
  • 举报
回复
客户机的IE属性>安全>可信站点>站点里将服务器的ip地址输入,自定义级别里将所有含activex的选项设为 启用
另外OCX控件最好打包成Internet应用,包为.cab后缀的即可.
luofenghen 2011-05-31
  • 打赏
  • 举报
回复
绝对路径 和相对路径的问题
/和没有/ 测试下吧
咸清 2011-05-31
  • 打赏
  • 举报
回复
我猜是客户端没有找到相关路径
zhmvb 2011-05-31
  • 打赏
  • 举报
回复
搞定了,原来是文件太多了,可能是打包时候的文件和目标机器上的文件有重复,在打包的时候只选择必须的几个文件,吧多余的文件去掉就可以了。
zhmvb 2011-05-31
  • 打赏
  • 举报
回复
up



.

7,764

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧