我有更新我们产品的windows服务。它将产品文件复制到临时目录(通常为"C:\Windows\ temp“),修补二进制文件,然后在重新启动时使用MoveFileEx将文件复制回安装目录(通常为"C:\Program Files\ product”)。安装目录中的文件从父文件夹继承其安全属性。在复制、修补和重新启动后,安装目录中的文件缺少某些ACL。具体地说,这些文件不再具有用户组的ACL,因此用户在重新引导后不能再运行该程序。
有人能解释一下这是怎么回事吗?从install目录复制到temp目录后,文件似乎继承了temp目录的ACL。不过,在MoveFileEx/Reboot上,这些文件只继承安装目录和临时目录共有的ACL。
发布于 2008-10-14 22:16:42
在Windows中,如果复制文件,该文件将采用目标目录的ACL。如果您移动一个文件,ACL将覆盖它可能从该目录继承的任何内容。我不确定MoveFileEx对一个文件有什么不同的操作方式。
临时目录通常位于用户配置文件下( %TMP%和%TEMP%通常都指向此处),因此在此处复制文件将具有该用户的权限。将这些文件移动到程序文件目录将仅具有该用户的权限,因此只能由安装用户运行。
发布于 2008-10-14 22:26:48
一种可能的解决方法是使用修补文件的副本-在相同的目录中,但具有不同的名称。重新启动后,可以替换修补的版本。或者,首先重新启动,然后就地修补它们,并在需要手动回滚的情况下将它们备份到temp目录。
如果您确实要将它们移动到其他位置,则在要打补丁的文件所在的位置创建临时文件夹将有助于权限保持不变,前提是该目录使用继承的权限。
https://stackoverflow.com/questions/203036
复制相似问题