找回密码
 加入
搜索
查看: 7422|回复: 18

[系统综合] dll 是否注册系统检查

 火.. [复制链接]
发表于 2011-1-26 09:49:48 | 显示全部楼层 |阅读模式
*.ocx *.dll 是否已在系统中注册,AU3如何做到这个的核实?

向大家请教一下。
发表于 2011-1-26 16:33:57 | 显示全部楼层
回复 1# boyhong

有必要检查吗?
 楼主| 发表于 2011-1-27 11:16:28 | 显示全部楼层
恩,有。  没有注册的就注一下,注册过的就跳下一个
发表于 2011-1-27 13:02:39 | 显示全部楼层
那重复注册也不会有问题啊,直接注册吧
发表于 2011-1-27 13:02:40 | 显示全部楼层
那重复注册也不会有问题啊,直接注册吧
发表于 2011-1-27 18:51:21 | 显示全部楼层
楼上正解哦
发表于 2011-1-27 20:54:06 | 显示全部楼层
多注几下啊。。。又不用钱
 楼主| 发表于 2011-1-29 09:37:55 | 显示全部楼层
唉。。。我现在就是重复注册。这样做是迫不得已。。。
同志们:我要检查121个dll是否被注册,若没有注册,我就注册一下并要导入对应一段文件。。。若有判断的话,我可以节约大量的时间。。。。程序效率将大大地提高!!!
发表于 2011-1-29 09:48:11 | 显示全部楼层
$sDll_Filename = "User32.dll"
$hDll = DllOpen($sDll_Filename)
If $hDll = -1 Then
        ConsoleWrite("未注册" &@CRLF)
Else
        ConsoleWrite("已注册" &@crlf)
EndIf
 楼主| 发表于 2011-1-29 10:15:50 | 显示全部楼层
$sDll_Filename = "User32.dll"
$hDll = DllOpen($sDll_Filename)
If $hDll = -1 Then
        ConsoleWrite("未 ...
smartzbs 发表于 2011-1-29 09:48



    非常感谢您的帮助,马上测试去了。
 楼主| 发表于 2011-1-29 10:54:44 | 显示全部楼层
[quote]$sDll_Filename = "User32.dll"
$hDll = DllOpen($sDll_Filename)
If $hDll = -1 Then


谢谢您,我测试失败。我在XP下先:regsvr32 /u WSHom.Ocx 后,均报:已注册。这是错误的。希望您若有空也帮助研究一下?感激不尽

$sDll_Filename = "WSHom.Ocx"
$hDll = DllOpen($sDll_Filename)
If $hDll = -1 Then
        MsgBox(16,"","未注册")
Else
        MsgBox(64,"","已注册")
EndIf
发表于 2011-1-29 11:43:30 | 显示全部楼层
本帖最后由 smartzbs 于 2011-1-29 12:02 编辑

是提示已注册,这段程序只是判断DllOpen($sDll_Filename)是否成功,即使你卸载了,因为文件仍存在于系统文件夹,所以DllOpen仍然是成功的,无需注册即可使用,既然能使用了,当然也就无需再注册了.

如果你的代码用的是ObjCreate ,那就判断当返回的不是一个OBJ就需注册. if not isobj($o) then

如果你担心200多个DLL要注册影响时间,把你判断的时间拿来注册也够了:
$sDll = "WSHom.Ocx"

_RegisterServer($sDll)

Func _RegisterServer($sDll)
    Local $fInit, $fError
    Local $aCall = DllCall("ole32.dll", "long", "OleInitialize", "ptr", 0)
    If Not @error Then $fInit = $aCall[0] <> 1 ; The COM library is already initialized
    $aCall = DllCall($sDll, "long", "DllRegisterServer")
    If @error Then $fError = True
    If $fInit Then DllCall("ole32.dll", "none", "OleUninitialize")
    If $fError Then Return SetError(2, 0, False)
    Return SetError($aCall[0] <> 0, $aCall[0], $aCall[0] = 0)
EndFunc
 楼主| 发表于 2011-1-29 12:28:09 | 显示全部楼层
是提示已注册,这段程序只是判断DllOpen($sDll_Filename)是否成功,即使你卸载了,因为文件仍存在于系统文件夹 ...
smartzbs 发表于 2011-1-29 11:43



    明白了,灰常感谢您细致的回答,论坛因为有您更精彩了。。。
发表于 2011-1-30 09:46:29 | 显示全部楼层
有更好的办法吗?
 楼主| 发表于 2011-1-30 14:39:39 | 显示全部楼层
有更好的办法吗?
ghl781258 发表于 2011-1-30 09:46


我在网上查了很长时间。有人说注册成功的DLL在注册表里有体现。但我一直没有找到相关确定能使用的东东。。。
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-11-15 21:07 , Processed in 0.077648 second(s), 23 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表