Themida中文网站 > 最新资讯 > Themida程序清单怎么添加 Themida程序清单怎么设置管理员权限
教程中心分类
Themida程序清单怎么添加 Themida程序清单怎么设置管理员权限
发布时间:2026/11/14 11:49:58

  桌面程序如果在启动时就要安装服务、写入系统目录,发布包里的主程序便需要声明相应的运行权限。这个声明放在Windows程序清单里,随EXE一起交付。使用Themida保护程序时,容易漏掉的是交付文件的核对:开发目录里留着一份清单,或工程里勾选了添加选项,都不能单独说明发布包里的EXE已经带上这项设置。

  一、Themida程序清单怎么添加

 

  Themida可以从文件读取自定义清单。配置前可以看一眼原始EXE的资源,分清它是还没有清单,还是已经有一份清单需要修改。

 

  1、确认原始程序有没有内嵌清单

 

  原始程序的清单可能已经声明了界面缩放、系统兼容性或组件依赖。手头另建一份只写权限的清单时,这些原有设置很容易漏掉。

 

  ①在装有Windows SDK的开发者命令提示符中,对【原始EXE】运行mt.exe-inputresource:"App.exe";#1-out:"input.manifest",将示例文件名换成实际名称。

 

  ②如果成功导出,打开【input.manifest】,查看现有的【requestedExecutionLevel】以及同一文件中的兼容性、依赖和界面缩放声明。

 

  ③如果工具提示找不到指定资源,先核对【App.exe】的路径和文件名。确认这份EXE没有资源编号为1的启动清单后,再准备单独的清单文件。

 

  2、在Themida工程中指定清单文件

 

  ①对于尚未内嵌清单的程序,将完整的XML清单保存为【App.manifest】,在文件管理器中确认实际扩展名。

 

  ②打开【Application Information】,在【Input Filename】中选中原始EXE,在【Output Filename】中填写另一个输出路径。

 

  ③打开【Extra Options】,在【Manifest Options】中勾选【Add Manifest from File】,填入【App.manifest】的实际路径。

 

  ④用【Save】保存工程,再单击【Protect】生成保护后的程序。

 

  3、原始程序已有清单时回到构建工程修改

 

  ①在源码工程中找到生成清单的【构建配置】或【应用程序清单文件】,修改所需的权限声明,保留其余配置。

 

  ②重新构建原始程序,导出清单确认修改已写入。将新生成的EXE指定为Themida的【Input Filename】,再生成保护后的文件。

 

  已有清单的项目可以把构建工程作为维护入口。这样以后调整权限或兼容性设置,只需检查同一份配置,也不用假定Themida会把外部清单与已有资源逐项合并。

 

  二、Themida程序清单怎么设置管理员权限

 

  是否要求以管理员身份启动,由Windows读取清单中的执行级别后决定。Themida的添加选项负责把清单带入产物,权限级别要写在清单本身。

 

  1、写入requireAdministrator

 

  如果程序一启动就要执行需要管理员权限的操作,可以在清单中声明requireAdministrator。修改已有清单时,直接改原来的执行级别,避免在同一份清单里再写一条。

 

  ①打开构建所用的【应用程序清单文件】。如果项目走Themida文件导入方式,则打开工程指定的【App.manifest】。

 

  ②找到【requestedExecutionLevel】,把该项写为。

 

  ③如果是新建清单,在【assembly】根元素中保留清单标识,将权限项放在trustInfo→security→requestedPrivileges层级内,并给trustInfo声明命名空间urn:schemas-microsoft-com:asm.v3。

 

  ④保存文件,重新构建原始程序或重新执行【Protect】,按当前工程的清单来源生成新的输出文件。

  2、按程序的使用方式选择执行级别

 

  ①如果程序平时只读写用户目录,检查【requestedExecutionLevel】是否可保留为asInvoker,让它沿用启动者的权限。

 

  ②如果考虑设置【highestAvailable】,分别用管理员账户和标准账户测试启动,并核对两类账户下实际能完成的操作。

 

  ③如果只有安装服务或更新系统配置的独立程序需要提权,把【requireAdministrator】配置在承担这项工作的EXE上,主程序保留原有级别。

 

  highestAvailable表示按当前账户可取得的权限运行,标准账户使用它也可能仍以普通权限启动。`requireAdministrator`则要求管理员权限,标准账户能否继续启动,取决于能否按系统策略提供管理员凭据。

 

  三、Themida保护后的管理员权限怎么核验

 

  验收用的文件应当与发布包里的那份一致。资源检查能确认权限声明有没有写进去,启动测试还能发现账号策略或程序自身的问题。

 

  1、从交付文件里重新导出清单

 

  ①找到发布包中的【保护后EXE】,确认路径与此次交付版本一致。若文件是从安装包里部署出来的,直接检查安装目录里的那份。

 

  ②对该文件运行mt.exe-inputresource:"App.protected.exe";#1-out:"check.manifest",把示例中的EXE名称换成待验收文件。

 

  ③打开【check.manifest】,核对【requestedExecutionLevel】的level和uiAccess。原始程序带有兼容性或组件依赖配置时,也一并对照导出的内容。

 

  2、区分没有提示和没有提权

 

  从已经提升权限的进程启动程序时,未必会再次弹出提示。只凭弹窗判断,很容易把有效的清单当成失效配置。

 

  ①关闭仍在运行的旧实例,从普通权限下的【文件资源管理器】双击交付文件,不使用右键菜单中的【以管理员身份运行】。

 

  ②在【任务管理器】的【详细信息】页查看进程,按需显示【已提升】列,确认实际运行的进程是否已提权。

 

  ③如果提示出现但程序没能启动,记录是【用户帐户控制】阶段未获同意或凭据,还是同意后程序退出。对后者,查看【事件查看器】中同一时刻的应用程序日志。

  总结

 

  程序清单看着只是一份小文件,却会改变用户每次打开程序时遇到的权限要求。对日常使用的主程序来说,一项偶尔才用到的维护功能,未必值得让整个程序次次都申请提权。确实离不开管理员权限的交付件,可以把导出的清单和测试时使用的账号类型一起记在发布记录里。以后更换构建配置或调整保护选项,有这份记录就容易分清问题出在哪一层。若项目还有安装器和独立更新程序,也欢迎交流这几类程序的权限分工。

176 5129 0128