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

时间:2016-10-18 09:52:47

标签: windows nsis

我们有一个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

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

我们发现这些文件归使用该组件的用户所有,而不是管理员,而管理员仍拥有完整的读取,写入和删除权限。

我们如何使这项工作?

1 个答案:

答案 0 :(得分:2)

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

为什么涉及UAC插件?只有降低您的系统访问权限才有用!使用正确也很棘手,所以我建议你试试没有它。

此第三方组件是否更改了ACL?卸载前检查ACL。

file system virtualization是否有可能欺骗你?检查VirtualStore文件夹。

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

建议不要让所有用户完全访问ProgramData下的文件夹,并且任何需要此功能的组件都不遵循Windows徽标指南。