我们有一个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
但是,不会删除通过操作组件创建的文件。
我们发现这些文件归使用该组件的用户所有,而不是管理员,而管理员仍拥有完整的读取,写入和删除权限。
我们如何使这项工作?
答案 0 :(得分:2)
这里有两个未知数来真正回答这个问题。
为什么涉及UAC插件?只有降低您的系统访问权限才有用!使用正确也很棘手,所以我建议你试试没有它。
此第三方组件是否更改了ACL?卸载前检查ACL。
file system virtualization是否有可能欺骗你?检查VirtualStore文件夹。
Process Monitor说什么?您是否收到了ACCESS_DENIED或其他错误?
建议不要让所有用户完全访问ProgramData下的文件夹,并且任何需要此功能的组件都不遵循Windows徽标指南。