Inno setup Inno安装程序安装-访问被拒绝

Inno setup Inno安装程序安装-访问被拒绝,inno-setup,access-denied,Inno Setup,Access Denied,我已经用inno安装程序创建了一个安装。“我的应用程序”在运行后在子文件夹中创建一个pdf文件,然后将其打开。但Windows7表示访问被拒绝,出现异常。发生了什么?如何使用innosetup授予对子文件夹的访问权限? 以下是ino内部的代码片段: Source: "C:\Users\Someone\Desktop\NET\Animations\*"; DestDir: "{app}\Animations"; Flags: ignoreversion recursesubdirs createa

我已经用inno安装程序创建了一个安装。“我的应用程序”在运行后在子文件夹中创建一个pdf文件,然后将其打开。但Windows7表示访问被拒绝,出现异常。发生了什么?如何使用innosetup授予对子文件夹的访问权限? 以下是ino内部的代码片段:

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

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

请尝试改用
{userdocs}
常量。使用
ExpandConstant
将其扩展到完整路径

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


编辑:啊,对不起。我完全错过了你的问题中你说你在安装后试图这样做的部分。我只是看了一下代码,认为这是您在安装过程中让Inno安装程序执行的操作

安装完成后,这是一个完全不同的答案。Windows 7(感谢)不允许您的应用程序(或任何应用程序)写入系统文件夹。其中包括
Windows
目录,以及
程序文件
文件夹及其包含的任何文件夹。这是一种安全措施,旨在阻止应用程序在不属于它们的地方疯狂运行

您有两种不同的选择:

  • 如果您确实需要对
    程序文件
    文件夹的写入权限,可以提示用户提升应用程序的进程。基本上,这意味着您将请求管理权限,他们将看到UAC的一个框,要求他们输入密码

    我提供了更多关于如何在中通过C#应用程序实现这一点的信息。对于以任何其他语言编写的应用程序,您将遵循类似的步骤;您只需调用内置于Windows API中的函数

  • 不过,更好的选择是修改应用程序,使其不必写入系统文件夹。这样,您就不必以管理权限运行。这是所有标准Windows应用程序的预期型号。微软至少从Windows 2000的早期就开始推荐它,但直到Vista,你才真正被迫使用它

    我将详细介绍应用程序在中具有写访问权限的各个位置(以及每个位置的各种用途)


  • 它是这样的:在我的桌面上,我有一个文件夹和子文件夹,当我将其合并到ino安装程序中,并在程序文件(X86)中安装后,我有相同的结构,但我的应用程序在安装后无法写入这些文件夹。表示访问被拒绝。“怎么了?”罗恩:对不起,我显然误解了你的问题。我已经更新了我的答案;看看这是否有帮助。谢谢你的回答。我发现解决方案将以下内容放入安装文件:[Dirs]Name:“{app}\Animations”;权限:所有人修改@罗恩:是的,你可以更改权限,但这是错误的方法。您的安装程序作为提升进程运行(任何名为
    setup.exe
    的应用程序都将运行;出于兼容性原因,这是一种特殊情况),因此它能够设置对所需任何文件夹的权限。您还可以授予每个人访问
    Windows
    文件夹的权限,但这绝对不是一个好主意。不清楚你为什么抵制简单地遵循最佳实践并将应用程序的数据存储在
    AppData
    文件夹中。我有一个主应用程序,可以在其各自的子文件夹中启动100个小型exe演示。例如,其中一些EXE要求access accdb等数据库位于同一文件夹中。那会给我带来一个问题。