dll 是否注册系统检查
*.ocx *.dll 是否已在系统中注册,AU3如何做到这个的核实?向大家请教一下。 回复 1# boyhong
有必要检查吗? 恩,有。没有注册的就注一下,注册过的就跳下一个 那重复注册也不会有问题啊,直接注册吧 那重复注册也不会有问题啊,直接注册吧 楼上正解哦 多注几下啊。。。又不用钱 唉。。。我现在就是重复注册。这样做是迫不得已。。。
同志们:我要检查121个dll是否被注册,若没有注册,我就注册一下并要导入对应一段文件。。。若有判断的话,我可以节约大量的时间。。。。程序效率将大大地提高!!! $sDll_Filename = "User32.dll"
$hDll = DllOpen($sDll_Filename)
If $hDll = -1 Then
ConsoleWrite("未注册" &@CRLF)
Else
ConsoleWrite("已注册" &@crlf)
EndIf $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
非常感谢您的帮助,马上测试去了。 $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 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 是提示已注册,这段程序只是判断DllOpen($sDll_Filename)是否成功,即使你卸载了,因为文件仍存在于系统文件夹 ...
smartzbs 发表于 2011-1-29 11:43 http://www.autoitx.com/images/common/back.gif
明白了,灰常感谢您细致的回答,论坛因为有您更精彩了。。。 有更好的办法吗? 有更好的办法吗?
ghl781258 发表于 2011-1-30 09:46 http://www.autoitx.com/images/common/back.gif
我在网上查了很长时间。有人说注册成功的DLL在注册表里有体现。但我一直没有找到相关确定能使用的东东。。。
页:
[1]
2