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

标签 windows nsis arelle

我们有一个 Windows 应用程序,其中包含一个写入 ProgramData 文件夹的组件。运行卸载程序时,不会删除该组件生成的文件。使用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。

有没有可能file system virtualization是在骗你吗?检查 VirtualStore 文件夹。

Process Monitor 是什么意思?说?您是否收到 ACCESS_DENIED 或其他错误?

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

关于windows - NSIS RMDir 无法删除 ProgramData 中用户创建的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40105024/

相关文章:

windows - 批处理脚本,在服务器上调用 cmd

python - 在 python 中实现消息框并在 windows 和 linux 中运行的更好方法

text - 如何在 NSDialogs 中定义字体颜色

python - 在 Arelle 开始时出现错误逃生错误

java - 如何获取USB设备是连接在USB3.0还是USB2.0口

Windows 命令 : how do I push current directory using chdir for popping later?

nsis - 如何使用 NSIS 制作自解压 exe?

64-bit - 如何检测安装了哪种 JRE——32 位与 64 位

python-2.7 - 如何开始在 Python 中分析 XBRL?

python - 如何使用 Arelle 的 Python API 仅从 XBRL 文件中提取财务报表?