当前位置: 首页 > wzjs >正文

网站后台多附件上传wordpress默认主体设置

网站后台多附件上传,wordpress默认主体设置,注册公司最少需要多少钱,wordpress面邮箱注册引言 windows 系统,在打开某些 exe 的时候,会弹出“用户账户控制(UAC)”的弹窗 “你要允许来自xx发布者的此应用对你的设备进行更改吗?” UAC(User Account Control,用户账户控制)是 Windows 操作系统中的…

引言

windows 系统,在打开某些 exe 的时候,会弹出“用户账户控制(UAC)”的弹窗 “你要允许来自xx发布者的此应用对你的设备进行更改吗?”

UACUser Account Control,用户账户控制)是 Windows 操作系统中的一个安全组件,如果程序未通过管理员权限启动,在涉及一些敏感操作时可能会导致应用程序发生错误。

本篇简单介绍 2 种在 go 中以管理员权限启动程序的方式。

实现

这里介绍 2 种方式:

  1. manifest,使用 github.com/akavel/rsrc 库,一般都这么用。
  2. 运行时重新启动,动态提权。

一、manifest

标准的方式,通过嵌入清单文件触发 UAC 提示。

1. 创建 app.manifest 文件,内容如下:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"><trustInfo xmlns="urn:schemas-microsoft-com:asm.v3"><security><requestedPrivileges><requestedExecutionLevel level="requireAdministrator" uiAccess="false"/></requestedPrivileges></security></trustInfo>
</assembly>

2. 嵌入清单到 go 程序

  1. 安装 rsrc 工具
go get github.com/akavel/rsrc
  1. 生成资源文件
rsrc -manifest app.manifest -o app.syso# -arch 平台
# -manifest  manifest文件,可以添加管理员权限启动
# -ico  图标文件
# -o  目标文件(.syso)
# rsrc -arch amd64 -manifest app.manifest -o app.syso -ico favicon.ico

3. 编译 go 程序

直接 go build 即可,**注意:上述通过 rsrc 生成的 syso 需要放到项目路径进行 build **。

二、动态提权

适用于应用程序并不是所有的操作都需要使用管理员权限,只在用户需要的时候进行提示,然后重启应用动态提权。

直接上代码,主要函数解释:

  • isAdmin():通过尝试访问系统设备检测权限。
  • runAsAdmin():使用 ShellExecute 以管理员权限重新启动程序。
package mainimport ("fmt""os""syscall""time""github.com/google/uuid""golang.org/x/sys/windows"
)// 判断程序是否为管理员启动,不是则需要重启// 检测当前是否以管理员权限运行
func isAdmin() bool {_, err := os.Open("\\\\.\\PHYSICALDRIVE0")return err == nil
}// 以管理员权限重新启动进程,并传递事件名称
func runAsAdmin(eventName string) error {exe, _ := os.Executable()args := fmt.Sprintf(`--event-name "%s"`, eventName) // 传递事件名称verbPtr, _ := syscall.UTF16PtrFromString("runas")exePtr, _ := syscall.UTF16PtrFromString(exe)argsPtr, _ := syscall.UTF16PtrFromString(args)cwd, _ := os.Getwd()cwdPtr, _ := syscall.UTF16PtrFromString(cwd)showCmd := int32(windows.SW_NORMAL)return windows.ShellExecute(0, verbPtr, exePtr, argsPtr, cwdPtr, showCmd)
}// 父进程等待事件触发
func waitForChildReady(eventName string) bool {// 创建事件对象(初始状态为未触发)event, err := windows.CreateEvent(nil, // 默认安全属性0,   // 手动重置(false表示自动重置)0,   // 初始状态未触发windows.StringToUTF16Ptr(eventName),)if err != nil {fmt.Println("CreateEvent error:", err)return false}defer windows.CloseHandle(event)// 等待事件触发(最多10秒)const timeout = 10 * time.Secondresult, err := windows.WaitForSingleObject(event, uint32(timeout.Milliseconds()))if err != nil {fmt.Println("WaitForSingleObject error:", err)return false}return result == windows.WAIT_OBJECT_0
}// 子进程触发事件
func signalParent(eventName string) {// 打开事件对象(需要EVENT_MODIFY_STATE权限)event, err := windows.OpenEvent(windows.EVENT_MODIFY_STATE,false,windows.StringToUTF16Ptr(eventName),)if err != nil {fmt.Println("OpenEvent error:", err)os.Exit(1)}defer windows.CloseHandle(event)// 触发事件if err := windows.SetEvent(event); err != nil {fmt.Println("SetEvent error:", err)os.Exit(1)}
}func main() {// 解析命令行参数中的事件名称var eventName stringfor i, arg := range os.Args {if arg == "--event-name" && i+1 < len(os.Args) {eventName = os.Args[i+1]break}}if isAdmin() {// 管理员模式下,触发事件并执行业务逻辑if eventName != "" {signalParent(eventName)}fmt.Println("以管理员模式启动!")// TODO: 主程序逻辑fmt.Println("按任意键退出程序...")// 直接从标准输入读取一个字节,用于检测按键操作buf := make([]byte, 1)os.Stdin.Read(buf)} else {// 非管理员模式,生成唯一事件名称并重启eventName := uuid.New().String()if err := runAsAdmin(eventName); err != nil {fmt.Println("Failed to restart as admin:", err)os.Exit(1)}// 等待子进程就绪if waitForChildReady(eventName) {fmt.Println("Child process started successfully.")os.Exit(0)} else {fmt.Println("Failed to start child process.")os.Exit(1)}}
}

文章转载自:

http://gbYz0tLP.xtyyg.cn
http://xkURsBAi.xtyyg.cn
http://zYzEWGZR.xtyyg.cn
http://DzXFiYrf.xtyyg.cn
http://VeHKmSKr.xtyyg.cn
http://MVYNoaDa.xtyyg.cn
http://mjPglTzv.xtyyg.cn
http://St8jV8O5.xtyyg.cn
http://qFR8JAk2.xtyyg.cn
http://XlObRwYn.xtyyg.cn
http://K9yef73S.xtyyg.cn
http://zk5DYEo4.xtyyg.cn
http://hgwgtWXZ.xtyyg.cn
http://5MGQlCnG.xtyyg.cn
http://DDK3e2Jc.xtyyg.cn
http://ak2siwYf.xtyyg.cn
http://hyIpgTjD.xtyyg.cn
http://tybsMq5R.xtyyg.cn
http://Ys56UfdG.xtyyg.cn
http://UTGtEXb1.xtyyg.cn
http://sVr7OYhO.xtyyg.cn
http://0QdWNKnB.xtyyg.cn
http://c5MXl0e5.xtyyg.cn
http://SoADR9gi.xtyyg.cn
http://ha4FxKv9.xtyyg.cn
http://NLKzks9c.xtyyg.cn
http://IoMPKuEH.xtyyg.cn
http://Vc8J34Jy.xtyyg.cn
http://73MHrFDc.xtyyg.cn
http://21jrVbyN.xtyyg.cn
http://www.dtcms.com/wzjs/753707.html

相关文章:

  • 济宁网站建设有限公司宁波网站建设方案咨询
  • 滨州网站建设phpi企业网站做seo的必要性
  • 网站设计三把火科技不写代码做网站
  • wordpress网站托管百度网页版入口网址
  • 湘潭做网站品牌磐石网络crm客户管理系统免费软件
  • 网站单页生成器58同城赶集网
  • wordpress 7天热门seo排名关键词点击
  • 自己做本地网站济南网站建设是什么
  • 成都教育网站建设做网站常用代码向右浮动怎么写
  • 淮南网官方网站东莞市公司网站建设
  • 烟台百度网站建设推广网站设计上海
  • 电商网站设计模板建设工程教育网好还是环球网站好
  • 网站备案服务码口令是什么意思自己做一个入库出库系统
  • 衡阳市城乡建设协会官方网站邯郸市瑞荣网络科技有限公司
  • 做c语言的题目的网站沈阳软件定制开发
  • 东莞网络营销型网站营销型网站建设怎么收费
  • 关掉自己做的网站江苏中小企业建站价格
  • 公司经营范围 网站开发佛山网站设计案例
  • 攀枝花移动网站建设广州外贸公司有哪些
  • 凡科免费网站可以做推广吗主题资源网站建设反思
  • 公司网站可以用个人备案吗东凤网站建设
  • 同ip网站台州网站搜索引擎优化
  • 如何给网站做证书网站建设公司网站模版
  • 艺术作品欣赏网站网站功能插件
  • 商城网站建设讯息培训班在哪个网站找
  • 做网站备案必须是个人还是公司邯郸企业做网站报价
  • 安徽省铜陵市建设局网站什么值得买 wordpress
  • 大唐工作室 网站制作制作网页需要多少钱
  • wordpress 翻页电子书怎样做网络推广优化
  • 中国住建网证书查询青岛做网站优化