标题:关于vfp连编后的exe运行时,控件失效问题
只看楼主
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:432
帖 子:10064
专家分:41463
注 册:2014-5-20
得分:0 
API CLSIDFromProgID()检测控件注册。
控件文件(OCX、DLL)里面有导出函数 DllRegisterServer()、DllUnregisterServer()注册或取消注册。
2016-01-01 20:23
asdf_123000
Rank: 4
等 级:业余侠客
威 望:1
帖 子:262
专家分:203
注 册:2012-12-20
得分:0 
看到过这些函数,就是不太会用,大师有不有实例?
2016-01-01 20:50
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:432
帖 子:10064
专家分:41463
注 册:2014-5-20
得分:5 
以下是引用asdf_123000在2016-1-1 20:50:16的发言:

看到过这些函数,就是不太会用,大师有不有实例?

* 检测MS日期控件 MSComCt2.OCX 未注册时完成注册,版本2-("MSComCtl2.DTPicker.2")
IF !myRegServer("MSComCtl2.DTPicker.2", 0)
    IF !myRegServer("MSComCt2.OCX", 1)
        RETURN .F.
    ENDIF
ENDIF

* 取消MS日期控件 MSComCt2.OCX 的注册
myRegServer("MSComCt2.OCX", 2)

FUNCTION myRegServer(sName, nFlags)
    IF INLIST(nFlags, 1, 2) AND !FILE(sName)
        MESSAGEBOX(sName + " 文件不存在")
        RETURN .F.
    ENDIF
    LOCAL sCLSID, nRet
    DO CASE
    CASE nFlags == 0
        DECLARE LONG CLSIDFromProgID IN Ole32 STRING, STRING@
        sCLSID = REPLICATE(0h00, 16)
        nRet = CLSIDFromProgID(STRCONV(sName + 0h00, 5), @sCLSID)
        CLEAR DLLS "CLSIDFromProgID"
        RETURN (nRet == 0)
    CASE nFlags == 1
        DECLARE LONG DllRegisterServer IN (sName)
        nRet = DllRegisterServer()
        CLEAR DLLS "DllRegisterServer"
    CASE nFlags == 2
        DECLARE LONG DllUnregisterServer IN (sName)
        nRet = DllUnregisterServer()
        CLEAR DLLS "DllUnregisterServer"
    OTHERWISE
        MESSAGEBOX("调用 myRegServer() 的参数无效")
        RETURN .F.
    ENDCASE
    IF (nRet != 0)
        MESSAGEBOX("调用 myRegServer() 失败,试用管理员身份运行。")
    ENDIF
    RETURN (nRet == 0)
ENDFUNC


[此贴子已经被作者于2016-1-1 20:59编辑过]

2016-01-01 20:57
asdf_123000
Rank: 4
等 级:业余侠客
威 望:1
帖 子:262
专家分:203
注 册:2012-12-20
得分:0 
其他WIN系统没问题,但在win10中出现:
调用 myRegServer() 失败,试用管理员身份运行
请问要怎么解决?
2016-01-01 21:41
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:432
帖 子:10064
专家分:41463
注 册:2014-5-20
得分:2 
高版本windows注册控件有权限,试用管理员身份运行。
2016-01-01 21:48
asdf_123000
Rank: 4
等 级:业余侠客
威 望:1
帖 子:262
专家分:203
注 册:2012-12-20
得分:0 
是的,我也没办法,VFP9还是用的installshield Express 5.0 for Visual ForPro打包,不能直接设置管理员身份运行
2016-01-01 21:56
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:432
帖 子:10064
专家分:41463
注 册:2014-5-20
得分:3 
回复 16楼 asdf_123000
可以单独编译成一个EXE文件,程序中以管理员身份运行这个外部EXE就可以。
如:
oApp = CREATEOBJECT("Shell.Application")
oApp.ShellExecute(EXE文件名, "", "", "runas", 1)
2016-01-01 23:09
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:432
帖 子:10064
专家分:41463
注 册:2014-5-20
得分:0 
以下是引用asdf_123000在2016-1-1 21:56:35的发言:

是的,我也没办法,VFP9还是用的installshield Express 5.0 for Visual ForPro打包,不能直接设置管理员身份运行

快捷可以右点选“以管理员身份运行”
2016-01-01 23:29
asdf_123000
Rank: 4
等 级:业余侠客
威 望:1
帖 子:262
专家分:203
注 册:2012-12-20
得分:0 
弯道超车,实属不易,就这么办,谢谢啊!
2016-01-01 23:41
eepcvfp
Rank: 2
等 级:论坛游民
帖 子:166
专家分:15
注 册:2013-8-12
得分:0 
留个脚印,学习。
2017-06-24 23:07



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-460708-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.040946 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved