boyhong 发表于 2011-1-26 09:49:48

dll 是否注册系统检查

*.ocx *.dll 是否已在系统中注册,AU3如何做到这个的核实?

向大家请教一下。

lixiaolong 发表于 2011-1-26 16:33:57

回复 1# boyhong

有必要检查吗?

boyhong 发表于 2011-1-27 11:16:28

恩,有。没有注册的就注一下,注册过的就跳下一个

lamlp 发表于 2011-1-27 13:02:39

那重复注册也不会有问题啊,直接注册吧

lamlp 发表于 2011-1-27 13:02:40

那重复注册也不会有问题啊,直接注册吧

ghl781258 发表于 2011-1-27 18:51:21

楼上正解哦

libosir 发表于 2011-1-27 20:54:06

多注几下啊。。。又不用钱

boyhong 发表于 2011-1-29 09:37:55

唉。。。我现在就是重复注册。这样做是迫不得已。。。
同志们:我要检查121个dll是否被注册,若没有注册,我就注册一下并要导入对应一段文件。。。若有判断的话,我可以节约大量的时间。。。。程序效率将大大地提高!!!

smartzbs 发表于 2011-1-29 09:48:11

$sDll_Filename = "User32.dll"
$hDll = DllOpen($sDll_Filename)
If $hDll = -1 Then
        ConsoleWrite("未注册" &@CRLF)
Else
        ConsoleWrite("已注册" &@crlf)
EndIf

boyhong 发表于 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 http://www.autoitx.com/images/common/back.gif


    非常感谢您的帮助,马上测试去了。

boyhong 发表于 2011-1-29 10:54:44

$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

smartzbs 发表于 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 <> 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, $aCall, $aCall = 0)
EndFunc

boyhong 发表于 2011-1-29 12:28:09

是提示已注册,这段程序只是判断DllOpen($sDll_Filename)是否成功,即使你卸载了,因为文件仍存在于系统文件夹 ...
smartzbs 发表于 2011-1-29 11:43 http://www.autoitx.com/images/common/back.gif


    明白了,灰常感谢您细致的回答,论坛因为有您更精彩了。。。

ghl781258 发表于 2011-1-30 09:46:29

有更好的办法吗?

boyhong 发表于 2011-1-30 14:39:39

有更好的办法吗?
ghl781258 发表于 2011-1-30 09:46 http://www.autoitx.com/images/common/back.gif

我在网上查了很长时间。有人说注册成功的DLL在注册表里有体现。但我一直没有找到相关确定能使用的东东。。。
页: [1] 2
查看完整版本: dll 是否注册系统检查