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

翻译《The Old New Thing》- How do I mark a shortcut file as requiring elevation?

How do I mark a shortcut file as requiring elevation? - The Old New Thing (microsoft.com)icon-default.png?t=N7T8https://devblogs.microsoft.com/oldnewthing/20071219-00/?p=24103

Raymond Chen 2007年12月19日


如何将快捷方式标记为需要提升权限

简要

文章介绍了如何通过设置SLDF_RUNAS_USER标志,将快捷方式标记为需要提升权限。提供了一个示例程序,用于修改快捷方式属性,使其以管理员身份运行。同时提醒读者,通常应由程序本身指定提升权限需求。

正文

        指定是否需要提升权限通常是程序(EXE)的责任。 这是通过在manifest清单中添加一个requestedExecutionLevel元素来完成的。 (Bart De Smet向你展示了如何做到这一点。 Calvin Hsia对你的Visual FoxPro程序也做了同样的事情。) 但是,如果你运行的程序没有这样的清单——也许是一个你无法控制的旧程序——你可以创建一个程序的快捷方式,并将快捷方式标记为需要提升权限。

        为此,你需要在快捷方式属性中设置SLDF_RUNAS_USER标志。 下面是一个设置命令行传递的快捷方式路径上的快捷方式标志的示例程序。 为了说明问题,我省略了错误报告,并且为了增加趣味性,我使用了ATL智能指针。

#include <windows.h>
#include <shlobj.h>
#include <atlbase.h>
void MarkShortcutRunAs(LPCWSTR pszShortcut)
{CComPtr<IPersistFile> sppf;if (FAILED(sppf.CoCreateInstance(CLSID_ShellLink))) return;if (FAILED(sppf->Load(pszShortcut, STGM_READWRITE))) return;CComQIPtr<IShellLinkDataList> spdl(sppf);if (!spdl) return;DWORD dwFlags;if (FAILED(spdl->GetFlags(&dwFlags))) return;dwFlags |= SLDF_RUNAS_USER;if (FAILED(spdl->SetFlags(dwFlags))) return;if (FAILED(sppf->Save(NULL, TRUE))) return;wprintf(L"Succeeded\n");
}
int __cdecl wmain(int argc, wchar_t *argv[])
{if (argc == 2 && SUCCEEDED(CoInitialize(NULL))) {MarkShortcutRunAs(argv[1]);CoUninitialize();}return 0;
}

        这个程序本身并没有太多内容。 它创建了一个外壳链接对象(CLSID_ShellLink), 并要求它从命令行给出的文件路径加载。 然后,它使用IShellLinkDataList::GetFlagsIShellLinkDataList::SetFlags来获取旧标志,并设置包括SLDF_RUNAS_USER的新标志。 一旦完成,它将结果保存回去。

        最难的部分是首先知道SLDF_RUNAS_USER标志的存在。

我担心大多数人会读到这篇文章并说,“太棒了!我的程序需要提升权限,这就是我如何标记我的开始菜单快捷方式来提示提升权限。谢谢,Raymond!” 这些人将完全忽略了开头的段落,该段落解释了那样做是《错误的事情》。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 微信小程序毕业设计-跑腿系统项目开发实战(附源码+演示视频+LW)
  • 青蛙跳台阶问题
  • [备忘.经验总结]特例问题通用问题,分而治之
  • 手机App收集个人信息,用户是否有权拒绝?
  • 所有平台均可发布,矩阵操作+工具+素材,自动混剪8090后怀旧视频
  • 牛客循环5.27
  • EPBU/MOBI转PDF
  • fastadmin二次开发 修改默认的前端弹出样式
  • JVM 常见配置参数
  • 汇聚荣科技有限公司怎么样?
  • 人工智能应用层岗位—AI项目经理/AI产品经理
  • 【MySQL】MySQL的安装和基本概念
  • 亚马逊云科技专家分享 | OPENAIGC开发者大赛能量加油站6月5日场预约开启~
  • 文化设计“All in AI”,第二十届文博会中芬设计园分会场盛大开幕
  • 顺序表实现通讯录项目
  • “大数据应用场景”之隔壁老王(连载四)
  • CentOS7简单部署NFS
  • Docker容器管理
  • httpie使用详解
  • jquery cookie
  • Js基础——数据类型之Null和Undefined
  • Koa2 之文件上传下载
  • mysql_config not found
  • Redash本地开发环境搭建
  • spring-boot List转Page
  • TCP拥塞控制
  • Xmanager 远程桌面 CentOS 7
  • 从@property说起(二)当我们写下@property (nonatomic, weak) id obj时,我们究竟写了什么...
  • 它承受着该等级不该有的简单, leetcode 564 寻找最近的回文数
  • 学习HTTP相关知识笔记
  • 译有关态射的一切
  • 转载:[译] 内容加速黑科技趣谈
  • 看到一个关于网页设计的文章分享过来!大家看看!
  • 移动端高清、多屏适配方案
  • ​Linux·i2c驱动架构​
  • # Redis 入门到精通(八)-- 服务器配置-redis.conf配置与高级数据类型
  • # 消息中间件 RocketMQ 高级功能和源码分析(七)
  • (1)STL算法之遍历容器
  • (Matalb时序预测)WOA-BP鲸鱼算法优化BP神经网络的多维时序回归预测
  • (超详细)语音信号处理之特征提取
  • (二)pulsar安装在独立的docker中,python测试
  • (二)Pytorch快速搭建神经网络模型实现气温预测回归(代码+详细注解)
  • (附源码)apringboot计算机专业大学生就业指南 毕业设计061355
  • (官网安装) 基于CentOS 7安装MangoDB和MangoDB Shell
  • (三)模仿学习-Action数据的模仿
  • (一)使用Mybatis实现在student数据库中插入一个学生信息
  • (转)JVM内存分配 -Xms128m -Xmx512m -XX:PermSize=128m -XX:MaxPermSize=512m
  • (转)Linux整合apache和tomcat构建Web服务器
  • (转)从零实现3D图像引擎:(8)参数化直线与3D平面函数库
  • (转)负载均衡,回话保持,cookie
  • (转)可以带来幸福的一本书
  • .gitignore
  • .Net Core 中间件验签
  • .NetCore 如何动态路由
  • .net操作Excel出错解决