You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Makeappx加密保护UWP Appxbundle中的指定文件

实现UWP应用特定文件的复制保护(带锁标不可复制)

首先明确:你看到微软商店应用里.exe/.dll带锁标的复制保护,不是通过BlockMap配置实现的。BlockMap的作用是生成文件块哈希,用于应用增量更新和安装完整性校验,和复制保护完全无关。真正的保护依赖微软商店签名机制+Windows系统加密策略,具体实现路径如下:

1. 核心机制说明

商店应用安装后出现的锁标,本质是系统对文件启用了加密文件系统(EFS),同时严格限制了文件访问权限。只有经过微软官方签名的应用包,通过商店渠道分发安装时,系统才会自动触发这套加密保护逻辑。

2. 本地测试失败的原因

你用Makeappx手动生成的Appxbundle,哪怕BlockMap配置正确,也不会触发系统的EFS加密保护,原因有两个:

  • 本地生成的包没有经过微软商店的官方企业级代码签名
  • 只有商店渠道安装的应用,系统才会自动应用文件加密和权限限制策略

3. 可行实现路径

路径一:通过微软商店发布应用(官方推荐)

这是实现该保护的唯一官方途径:

  • 按正常流程将应用提交微软商店,审核通过后微软会对应用包进行签名
  • 用户从商店安装时,系统会自动对包内.exe/.dll等可执行文件启用EFS加密,并设置严格访问权限,最终呈现带锁标、不可复制的状态

路径二:企业内部本地部署(仅限企业场景)

如果是企业内部部署的UWP应用,可以手动模拟类似效果:

  • 用企业级代码签名证书对Appxbundle签名
  • 部署后通过PowerShell脚本手动启用EFS加密并配置NTFS权限:
    1. 先获取应用安装路径(C:\Program Files\WindowsApps\<你的应用包全名>)
    2. 执行加密命令:
      cipher /e "C:\Program Files\WindowsApps\<应用包路径>\*.exe" "C:\Program Files\WindowsApps\<应用包路径>\*.dll"
      
    3. 设置权限拒绝普通用户复制/移动:
      $targetPath = "C:\Program Files\WindowsApps\<应用包路径>"
      $acl = Get-Acl "$targetPath\*.exe"
      $rule = New-Object System.Security.AccessControl.FileSystemAccessRule("Users","Modify","Deny")
      $acl.AddAccessRule($rule)
      Set-Acl "$targetPath\*.exe" $acl
      
      # 对DLL执行同样操作
      $acl = Get-Acl "$targetPath\*.dll"
      $acl.AddAccessRule($rule)
      Set-Acl "$targetPath\*.dll" $acl
      
    注意:WindowsApps是系统保护目录,操作需要提升权限,且这种方式的保护强度不如商店原生机制。

4. BlockMap的正确用途

BlockMap不需要为特定文件单独配置,它的作用是支持增量更新和完整性校验,创建Appxbundle时用以下命令生成即可:

Makeappx bundle /f <内容清单文件> /p <输出Appxbundle路径> /m <BlockMap输出路径>

内容的提问来源于stack exchange,提问作者geeker

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 07:50:14