繁体   English   中英

NSIS RMDir 无法删除用户在 ProgramData 中创建的文件

[英]NSIS RMDir failing to delete user created files in ProgramData

我们有一个带有写入 ProgramData 文件夹的组件的 Windows 应用程序。 运行卸载程序时,不会删除此组件生成的文件。 使用 UAC::RunElevated,我们首先将第三方组件安装到 ProgramData 中

SetOutPath "$RENDERER_INSTALL_DIR"

LogSet On
File /r "${MAGNIFY_DIR}/secRenderer/Arelle/*"
LogSet Off

AccessControl::GrantOnFile "$RENDERER_INSTALL_DIR" "(S-1-5-32-545)" "FullAccess"

在运行期间,该组件会写入自己在 ProgramData 中的安装目录

在卸载过程中,我们尝试删除上面创建的文件夹,再次使用 UAC::RunElevated

RMDir /r $RENDERER_INSTALL_DIR

但是,不会删除通过操作组件创建的文件。

我们观察到这些文件归使用该组件的用户所有,而不是由管理员拥有,管理员拥有完整的读、写和删除权限。

我们如何进行这项工作?

这里有两个未知数可以真正回答这个问题。

为什么会涉及到UAC插件? 只有降低您的系统访问权限才有用! 正确使用也很棘手,因此我建议您尝试不使用它。

这个第 3 方组件是否会更改 ACL? 卸载前检查ACL。

文件系统虚拟化有没有可能欺骗你? 检查 VirtualStore 文件夹。

进程监视器说什么? 您是否收到 ACCESS_DENIED 或其他错误?

不建议向所有用户授予对 ProgramData 下文件夹的完全访问权限,并且任何需要此权限的组件都不遵循 Windows 徽标指南。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM