| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 4535 人关注过本帖, 1 人收藏
标题:VFP9程序中如何以管理员权限注册dll文件
只看楼主 加入收藏
radiofan
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:11
帖 子:466
专家分:696
注 册:2006-7-30
结帖率:76.47%
收藏(1)
已结贴  问题点数:20 回复次数:16 
VFP9程序中如何以管理员权限注册dll文件
如题:VFP9程序中如何以管理员权限注册一个dll文件。

多谢!
搜索更多相关主题的帖子: 管理员 注册 dll 文件 权限 
2020-02-19 20:31
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10537
专家分:42927
注 册:2014-5-20
收藏
得分:20 
这个DLL文件是怎样编译来的?
2020-02-19 20:35
radiofan
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:11
帖 子:466
专家分:696
注 册:2006-7-30
收藏
得分:0 
以下是引用吹水佬在2020-2-19 20:35:02的发言:

这个DLL文件是怎样编译来的?


良田高拍仪的eloamcom.dll,用管理员手工注册可以,程序中run regsvr32 注册没动静
2020-02-19 21:10
radiofan
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:11
帖 子:466
专家分:696
注 册:2006-7-30
收藏
得分:0 
以下是引用吹水佬在2020-2-19 20:35:02的发言:

这个DLL文件是怎样编译来的?

有看过你早几年写的用api  shell…  解决权限问题,但不知道怎么用!
2020-02-19 21:12
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10537
专家分:42927
注 册:2014-5-20
收藏(1)
得分:0 
方法一、编译生成“以管理员身份运行”的EXE

假设:
项目文件名 test.pjx
在 test.pjx 的文件夹里建一个文件名 test.exe.manifest 的文本文件
test.exe.manifest 文本文件的内容:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity
    version="1.0.0.0"
    type="win32"
    name="Microsoft.VisualFoxPro"
    processorArchitecture="x86"
/>
<description>Visual FoxPro</description>
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
    <security>
        <requestedPrivileges>
            <requestedExecutionLevel level="requireAdministrator" />
        </requestedPrivileges>
    </security>
</trustInfo>
<dependency>
    <dependentAssembly>
        <assemblyIdentity
            type="win32"
            name="Microsoft.
            version="6.0.0.0"
            language="*"
            processorArchitecture="x86"
            publicKeyToken="6595b64144ccf1df"
        />
    </dependentAssembly>
</dependency>
</assembly>

这样VFP编译生成 test.exe 时载入 test.exe.manifest 资源生成一个“以管理员身份运行”的EXE。


方法二、以管理员身份运行程序

    oApp = CREATEOBJECT("Shell.Application")
    oApp.ShellExecute("test.exe", "", "", "runas", 1)


2020-02-20 07:50
radiofan
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:11
帖 子:466
专家分:696
注 册:2006-7-30
收藏
得分:0 
以下是引用吹水佬在2020-2-20 07:50:59的发言:

方法一、编译生成“以管理员身份运行”的EXE

假设:
项目文件名 test.pjx
在 test.pjx 的文件夹里建一个文件名 test.exe.manifest 的文本文件
test.exe.manifest 文本文件的内容:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity
    version="1.0.0.0"
    type="win32"
    name="Microsoft.VisualFoxPro"
    processorArchitecture="x86"
/>
<description>Visual FoxPro</description>
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
    <security>
        <requestedPrivileges>
            <requestedExecutionLevel level="requireAdministrator" />
        </requestedPrivileges>
    </security>
</trustInfo>
<dependency>
    <dependentAssembly>
        <assemblyIdentity
            type="win32"
            name="Microsoft.
            version="6.0.0.0"
            language="*"
            processorArchitecture="x86"
            publicKeyToken="6595b64144ccf1df"
        />
    </dependentAssembly>
</dependency>
</assembly>

这样VFP编译生成 test.exe 时载入 test.exe.manifest 资源生成一个“以管理员身份运行”的EXE。


方法二、以管理员身份运行程序

    oApp = CREATEOBJECT("Shell.Application")
    oApp.ShellExecute("test.exe", "", "", "runas", 1)


谢谢回复!
1、这个文本文件有。
2、RUN /N regsvr32 d:\gpycs\bin\eloamcom.dll /s 写在bat文件中以管理员权限运行,可以注册;写在程序里没有提示,并未注册成功。

说明:我的操作系统Windows server 2012R2


[此贴子已经被作者于2020-2-20 09:06编辑过]

2020-02-20 09:04
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10537
专家分:42927
注 册:2014-5-20
收藏
得分:0 
没用过 Windows server 版本,情况不明
按理能手动“以管理员身份运行”成功,用代码自动运行也应该可以,是否系统登录身份也要有管理权?
另:用 regsvr32 注册的DLL,自身就有注册函数:
示例:
FUNCTION _RegServer(szName, ddFlags)
    IF INLIST(ddFlags, 1, 2) AND !FILE(szName)
        MESSAGEBOX(szName + " 文件不存在")
        RETURN .F.
    ENDIF
    LOCAL szCLSID, ddRet
    DO CASE
        * 检测是否已注册, szName为DLL文件名
    CASE ddFlags == 0
        DECLARE LONG CLSIDFromProgID IN Ole32 STRING@, STRING@
        szCLSID = REPLICATE(0h00, 16)
        ddRet = CLSIDFromProgID(STRCONV(szName + 0h00, 5), @szCLSID)
        CLEAR DLLS "CLSIDFromProgID"
        RETURN (ddRet == 0)
        * 注册
    CASE ddFlags == 1
        DECLARE LONG DllRegisterServer IN (szName)
        ddRet = DllRegisterServer()
        CLEAR DLLS "DllRegisterServer"
        * 卸载
    CASE ddFlags == 2
        DECLARE LONG DllUnregisterServer IN (szName)
        ddRet = DllUnregisterServer()
        CLEAR DLLS "DllUnregisterServer"
    OTHERWISE
        MESSAGEBOX("调用_RegServer()的参数无效")
        RETURN .F.
    ENDCASE
    IF (ddRet != 0)
        MESSAGEBOX("调用_RegServer()失败,试用管理员身份运行。")
    ENDIF
    RETURN (ddRet == 0)
ENDFUNC

2020-02-20 09:33
radiofan
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:11
帖 子:466
专家分:696
注 册:2006-7-30
收藏
得分:0 
以下是引用吹水佬在2020-2-20 09:33:06的发言:

没用过 Windows server 版本,情况不明
按理能手动“以管理员身份运行”成功,用代码自动运行也应该可以,是否系统登录身份也要有管理权?
另:用 regsvr32 注册的DLL,自身就有注册函数:
示例:
FUNCTION _RegServer(szName, ddFlags)
    IF INLIST(ddFlags, 1, 2) AND !FILE(szName)
        MESSAGEBOX(szName + " 文件不存在")
        RETURN .F.
    ENDIF
    LOCAL szCLSID, ddRet
    DO CASE
        * 检测是否已注册, szName为DLL文件名
    CASE ddFlags == 0
        DECLARE LONG CLSIDFromProgID IN Ole32 STRING@, STRING@
        szCLSID = REPLICATE(0h00, 16)
        ddRet = CLSIDFromProgID(STRCONV(szName + 0h00, 5), @szCLSID)
        CLEAR DLLS "CLSIDFromProgID"
        RETURN (ddRet == 0)
        * 注册
    CASE ddFlags == 1
        DECLARE LONG DllRegisterServer IN (szName)
        ddRet = DllRegisterServer()
        CLEAR DLLS "DllRegisterServer"
        * 卸载
    CASE ddFlags == 2
        DECLARE LONG DllUnregisterServer IN (szName)
        ddRet = DllUnregisterServer()
        CLEAR DLLS "DllUnregisterServer"
    OTHERWISE
        MESSAGEBOX("调用_RegServer()的参数无效")
        RETURN .F.
    ENDCASE
    IF (ddRet != 0)
        MESSAGEBOX("调用_RegServer()失败,试用管理员身份运行。")
    ENDIF
    RETURN (ddRet == 0)
ENDFUNC

图片附件: 游客没有浏览图片的权限,请 登录注册
图片附件: 游客没有浏览图片的权限,请 登录注册

如图:视乎这个dll注册需要一串dll,这几个文件缺一不可。另外,用myfll或者上面的代码会有错误提示,不知何故?
2020-02-20 19:05
radiofan
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:11
帖 子:466
专家分:696
注 册:2006-7-30
收藏
得分:0 
以下是引用吹水佬在2020-2-20 09:33:06的发言:

没用过 Windows server 版本,情况不明
按理能手动“以管理员身份运行”成功,用代码自动运行也应该可以,是否系统登录身份也要有管理权?
另:用 regsvr32 注册的DLL,自身就有注册函数:
示例:
FUNCTION _RegServer(szName, ddFlags)
    IF INLIST(ddFlags, 1, 2) AND !FILE(szName)
        MESSAGEBOX(szName + " 文件不存在")
        RETURN .F.
    ENDIF
    LOCAL szCLSID, ddRet
    DO CASE
        * 检测是否已注册, szName为DLL文件名
    CASE ddFlags == 0
        DECLARE LONG CLSIDFromProgID IN Ole32 STRING@, STRING@
        szCLSID = REPLICATE(0h00, 16)
        ddRet = CLSIDFromProgID(STRCONV(szName + 0h00, 5), @szCLSID)
        CLEAR DLLS "CLSIDFromProgID"
        RETURN (ddRet == 0)
        * 注册
    CASE ddFlags == 1
        DECLARE LONG DllRegisterServer IN (szName)
        ddRet = DllRegisterServer()
        CLEAR DLLS "DllRegisterServer"
        * 卸载
    CASE ddFlags == 2
        DECLARE LONG DllUnregisterServer IN (szName)
        ddRet = DllUnregisterServer()
        CLEAR DLLS "DllUnregisterServer"
    OTHERWISE
        MESSAGEBOX("调用_RegServer()的参数无效")
        RETURN .F.
    ENDCASE
    IF (ddRet != 0)
        MESSAGEBOX("调用_RegServer()失败,试用管理员身份运行。")
    ENDIF
    RETURN (ddRet == 0)
ENDFUNC


我手动注册成功后,?_RegServer("d:\gpycs\eloamcom.dll", 0)返回.F.
https://meta.box.  这是官网控件,有空麻烦看看,多谢版主!

[此贴子已经被作者于2020-2-20 20:33编辑过]

2020-02-20 19:54
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10537
专家分:42927
注 册:2014-5-20
收藏
得分:0 
给 eloamcom.dll 文件看看
2020-02-20 20:32
快速回复:VFP9程序中如何以管理员权限注册dll文件
数据加载中...
 
   



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

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