我使用inno设置创建了一个安装。运行后我的应用程序(以及其他内容)在子文件夹中创建一个pdf文件,然后打开它。但Windows 7表示拒绝访问和异常弹出。怎么了?如何使用innosetup授予对子文件夹的访问权限? 这是ino中的代码片段:
Source: "C:\Users\Someone\Desktop\NET\Animations\*"; DestDir: "{app}\Animations"; Flags: ignoreversion recursesubdirs createallsubdirs
答案 0 :(得分:4)
大概是因为您试图从不同的用户的私人文件夹中复制文件。这是禁区。您只能将文件放入当前用户的文件夹(运行安装的文件夹)。无论如何,很难想象你为什么要这样做的理由。
请尝试使用 {userdocs}
常量。使用ExpandConstant
将其展开到完整路径。
如果您需要在所有用户都可以访问的位置进行操作,则需要使用管理员权限运行安装程序。然后,您将能够从All Users
配置文件目录中读取/写入。
编辑:啊,抱歉。我完全错过了你在安装后试图做的部分问题。我只是看了一下代码,认为这是你在安装过程中让Inno安装程序做的事情。
安装完成后的完全不同的答案。 Windows 7(感谢UAC)不允许您的应用(或任何应用)写入系统文件夹。这包括Windows
目录,以及Program Files
文件夹及其包含的任何文件夹。这是一项安全措施,旨在阻止应用程序在不属于自己的地方运行。
您有几种不同的选择:
如果绝对需要对Program Files
文件夹的写入权限,则可以提示用户提升应用程序的进程。基本上,这意味着您将要求管理员权限,他们会看到UAC的一个框要求他们输入密码。
我提供了有关如何从my answer to this question中的C#应用程序执行此操作的更多信息。对于使用任何其他语言编写的应用程序,您将遵循类似的步骤;你只是调用Windows API中内置的函数。
better 选项是修改您的应用程序,使不必须写入系统文件夹。这样,您就不必使用管理权限运行。这是所有标准Windows应用程序的预期模型。至少从Windows 2000早期开始,微软一直在推荐它,但实际上你并没有被迫跟踪它直到Vista。
我在my answer to this question中详细讨论了应用具有写入权限的各个地方(以及每种地方的各种用途)。