如何用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权限:
- 先获取应用安装路径(
C:\Program Files\WindowsApps\<你的应用包全名>) - 执行加密命令:
cipher /e "C:\Program Files\WindowsApps\<应用包路径>\*.exe" "C:\Program Files\WindowsApps\<应用包路径>\*.dll" - 设置权限拒绝普通用户复制/移动:
$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
- 先获取应用安装路径(
4. BlockMap的正确用途
BlockMap不需要为特定文件单独配置,它的作用是支持增量更新和完整性校验,创建Appxbundle时用以下命令生成即可:
Makeappx bundle /f <内容清单文件> /p <输出Appxbundle路径> /m <BlockMap输出路径>
内容的提问来源于stack exchange,提问作者geeker
相关产品推荐
相关产品推荐

