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

我们有一个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中它自己的安装目录

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

 RMDir /r $RENDERER_INSTALL_DIR 

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

我们观察到,这些文件是由使用该组件的用户拥有的,而不是由拥有完全读取,写入和删除权限的pipe理员拥有的。

我们如何做这项工作?

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

为什么涉及UAC插件? 只有降低系统访问权限才有用! 正确使用也很困难,所以我建议你尝试一下。

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

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

过程监视器说什么? 你得到ACCESS_DENIED或其他一些错误?

不建议所有用户完全访问ProgramData下的文件夹,任何需要此操作的组件都不符合Windows徽标的指导原则。