NSIS脚本无法识别系统配置目录文件夹,卸载时无法删除MyApp
问题原因与解决方案
核心原因:文件系统重定向(File System Redirector)
你的NSIS卸载程序大概率是32位编译的。在64位Windows系统中,32位程序访问C:\Windows\System32时,会被系统自动重定向到C:\Windows\SysWOW64目录,而systemprofile是64位系统专属的系统配置文件夹,仅存在于真实的System32路径下,所以32位NSIS脚本无法定位到目标文件夹。
命令行能正常访问是因为你打开的是64位命令提示符(64位系统默认的cmd.exe为64位版本),不会触发重定向机制。
解决方案
通过NSIS的x64扩展组件临时禁用文件系统重定向,确保脚本能访问真实的System32目录:
- 在脚本头部引入x64扩展:
!include x64.nsh
- 在执行删除操作前,切换到64位视图并禁用重定向:
; 切换到64位注册表视图,避免路径解析偏差 SetRegView 64 ; 临时禁用文件系统重定向 DisableX64FSRedirection ; 执行递归删除操作 RMDir /r "$SYSDIR\config\systemprofile\AppData\Roaming\MyApp" ; 恢复文件系统重定向(必须执行,避免影响后续逻辑) EnableX64FSRedirection SetRegView default
额外检查项
- 确保卸载程序运行时,你的Windows服务已完全停止,避免文件夹内有文件被占用导致删除失败。
- 若仍存在权限问题,可使用
AccessControl.nsh扩展为当前进程赋予目标文件夹的删除权限,不过多数情况下解决重定向问题后即可完成删除。
内容的提问来源于stack exchange,提问作者Mateut Alin
相关产品推荐
相关产品推荐

