大概是因为您试图从其他用户的私人文件夹中复制文件。那是禁区。您只能将文件放入当前用户的文件夹(正在运行安装的用户)。无论如何,很难想象一个很好的理由为什么你想这样做。
尝试改用{userdocs}
常量。用于ExpandConstant
将其扩展为完整路径。
如果您需要将东西放在所有用户都可以访问的位置,则需要以管理权限运行安装程序。然后,您将能够从All Users
配置文件目录读取/写入。
编辑:啊,对不起。我完全错过了您说您在安装后尝试执行此操作的部分问题。我只是查看了代码,并认为这是您在设置过程中让 Inno Setup 执行的操作。
安装完成后,这是一个完全不同的答案。Windows 7(感谢UAC)不允许您的应用程序(或任何应用程序,就此而言)写入系统文件夹。这包括Windows
目录、Program Files
文件夹及其包含的任何文件夹。这是一项安全措施,旨在阻止应用程序在不属于它们的地方乱跑。
你有几个不同的选择:
如果您绝对需要对该文件夹的写入权限Program Files
,您可以提示用户提升您的应用程序的进程。基本上,这意味着您将请求管理权限,他们会看到来自 UAC 的框,要求他们输入密码。
在我对这个问题的回答中,我提供了有关如何从 C# 应用程序执行此操作的更多信息。对于以任何其他语言编写的应用程序,您将遵循类似的步骤;您只是在调用内置于 Windows API 中的函数。
不过,更好的选择是修改您的应用程序,使其不必写入系统文件夹。这样,您就不必以管理权限运行。这是所有标准 Windows 应用程序的预期模型。至少从 Windows 2000 的早期开始,Microsoft 就一直在推荐它,但直到 Vista 之前,您实际上并没有被迫遵循它。
在我对这个问题的回答中,我更多地讨论了应用程序具有写入权限的各个地方(以及每个地方的各种用途)。