2

我已经使用 inno setup 创建了一个安装。我的应用程序(除其他外)运行后会在子文件夹中创建一个 pdf 文件,然后打开它。但是windows 7说访问被拒绝并弹出异常。怎么了?如何使用 innosetup 授予对子文件夹的访问权限?这是 ino 中的代码片段:

Source: "C:\Users\Someone\Desktop\NET\Animations\*"; DestDir: "{app}\Animations"; Flags: ignoreversion recursesubdirs createallsubdirs
4

1 回答 1

4

大概是因为您试图从其他用户的私人文件夹中复制文件。那是禁区。您只能将文件放入当前用户的文件夹(正在运行安装的用户)。无论如何,很难想象一个很好的理由为什么你想这样做。

尝试改用{userdocs}常量。用于ExpandConstant将其扩展为完整路径。

如果您需要将东西放在所有用户都可以访问的位置,则需要以管理权限运行安装程序。然后,您将能够从All Users配置文件目录读取/写入。


编辑:啊,对不起。我完全错过了您说您在安装后尝试执行此操作的部分问题。我只是查看了代码,并认为这是您设置过程中让 Inno Setup 执行的操作。

安装完成,这是一个完全不同的答案。Windows 7(感谢UAC)不允许您的应用程序(或任何应用程序,就此而言)写入系统文件夹。这包括Windows目录、Program Files文件夹及其包含的任何文件夹。这是一项安全措施,旨在阻止应用程序在不属于它们的地方乱跑。

你有几个不同的选择:

  1. 如果您绝对需要对该文件夹的写入权限Program Files,您可以提示用户提升您的应用程序的进程。基本上,这意味着您将请求管理权限,他们会看到来自 UAC 的框,要求他们输入密码。

    在我对这个问题的回答中,我提供了有关如何从 C# 应用程序执行此操作的更多信息。对于以任何其他语言编写的应用程序,您将遵循类似的步骤;您只是在调用内置于 Windows API 中的函数。

  2. 不过,更好的选择是修改您的应用程序,使其不必写入系统文件夹。这样,您就不必以管理权限运行。这是所有标准 Windows 应用程序的预期模型。至少从 Windows 2000 的早期开始,Microsoft 就一直在推荐它,但直到 Vista 之前,您实际上并没有被迫遵循它。

    在我对这个问题的回答中,我更多地讨论了应用程序具有写入权限的各个地方(以及每个地方的各种用途)。

于 2011-04-06T15:15:16.973 回答