Delphi将文件复制到Windows 7中的systemdir问题

时间:2011-06-27 10:47:42

标签: delphi uac

我可以使用copyfile();函数将文件复制到Windows XP上的c:/ windows / system32,但后来我在Windows 7上使用该功能我无法复制它:o文件不会来那里....

我在编写和阅读注册时遇到了同样的问题,但通过声明WOW键$ 0100修复了它...

我认为这个问题不透明但不确定..有人可以解释一下:D?

3 个答案:

答案 0 :(得分:6)

这确实是因为UAC。它被称为File/FolderRegistry虚拟化。它适用于尚未遵守新UAC规则的旧应用程序(例如,除非您是管理员,否则不写入系统文件夹)。

通过创建清单文件,您可以关闭此虚拟化。见here。这可以是单独的文件或嵌入到exe中。较新的Delphi版本已生成包含此类清单的可执行文件,并已将requestedExecutionLevel设置为asInvoker。除非用户专门以管理员身份运行程序,否则通常不允许在这些位置进行写入。将其设置为requireAdministrator允许在这些位置写入,但也意味着用户必须确认他们想以管理员身份运行您的程序。

答案 1 :(得分:5)

确实是UAC阻止您将文件复制到system32文件夹。你必须问自己为什么要在那里复制文件。普通应用程序永远不会将文件复制到system32文件夹。

有时在安装过程中,您可能希望在那里复制dll,但即使这是遗留行为。如果您真的想在那里复制文件,您应该在应用程序开始时请求Elevation。

答案 2 :(得分:1)

为什么要在那里复制文件?它应该是操作系统私有目录。除非您正在安装驱动程序等,否则您应该从不写在那里。在XP中你只能因为你运行管理员权限,尝试使用普通用户而你不能(至少2000,如果不是在NT),但它会给你一个错误,因为它赢了不重定向写。除非你有充分的理由去写那里,否则我建议你重新设计你的应用程序,在适当的地方写,而不是试图找到一种方法来写。无论如何,只要用户没有权限并且无法执行提升,它就会失败。