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

Windows NSIS RMDir无法删除ProgramData中用户创建的文件,windows,nsis,arelle,Windows,Nsis,Arelle,我们有一个Windows应用程序,它的一个组件可以写入ProgramData文件夹。卸载程序运行时,不会删除此组件生成的文件。使用UAC::RunHighted,我们首先将第三方组件安装到ProgramData中 SetOutPath "$RENDERER_INSTALL_DIR" LogSet On File /r "${MAGNIFY_DIR}/secRenderer/Arelle/*" LogSet Off AccessControl::GrantOnFile "$RENDERER_I

我们有一个Windows应用程序,它的一个组件可以写入ProgramData文件夹。卸载程序运行时,不会删除此组件生成的文件。使用UAC::RunHighted,我们首先将第三方组件安装到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中自己的安装目录

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"
在卸载过程中,我们尝试删除上面创建的文件夹,再次使用UAC::RunHighted

RMDir /r $RENDERER_INSTALL_DIR
但是,不会删除通过操作组件创建的文件

我们注意到,这些文件由使用该组件的用户拥有,而不是管理员拥有,管理员仍然拥有完全的读、写和删除权限


我们是如何做到这一点的?

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

为什么要使用UAC插件?只有降低系统访问权限才有用!它也很难正确使用,因此我建议您尝试不使用它

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

这有可能是在欺骗你吗?检查VirtualStore文件夹

你说什么?您是否被拒绝访问或出现其他错误


不建议允许所有用户完全访问ProgramData下的文件夹,任何需要此权限的组件都不符合Windows徽标指南。

我建议您不要使用UAC插件。谢谢-process monitor向我们显示RMDir行实际上没有运行,我们没有意识到这一点,因为我们没有意识到卸载程序会自动删除它知道的文件