我已经使用 inno setup 创建了一个安装。我的应用程序(除其他外)运行后会在子文件夹中创建一个 pdf 文件,然后打开它。但 Windows 7 说访问被拒绝并弹出异常。怎么了?如何使用 innosetup 授予对子文件夹的访问权限?
这是 ino 中的代码片段:
Source: "C:\Users\Someone\Desktop\NET\Animations\*"; DestDir: "{app}\Animations"; Flags: ignoreversion recursesubdirs createallsubdirs
大概是因为您正在尝试从不同的用户的私人文件夹。那是禁区。您只能将文件放入当前用户的文件夹(正在运行安装的文件夹)。无论如何,很难想象有什么充分的理由让你想要这样做。
尝试使用{userdocs}
相反,常数。使用ExpandConstant
将其扩展为完整路径。
如果您需要将东西放在方便到达的地方all用户,您需要以管理权限运行安装程序。然后,您将能够从All Users
配置文件目录。
EDIT:啊,抱歉。我完全错过了你问题中你说你试图这样做的部分after安装。我只是看了代码,认为这是你让 Inno Setup 做的事情during设置过程。
这是对某件事完全不同的答案after安装已完成。 Windows 7(感谢UAC http://en.wikipedia.org/wiki/User_Account_Control)不允许您的应用程序(或anyapp,就此而言)写入系统文件夹。这包括Windows
目录,以及Program Files
文件夹及其包含的任何文件夹。这是一项安全措施,旨在阻止应用程序在不属于它们的地方疯狂运行。
您有几种不同的选择:
-
If you 绝对地需要写访问权限Program Files
文件夹中,您可以提示用户提升应用程序的进程。基本上,这意味着您将请求管理权限,并且他们会看到 UAC 中的一个框,要求他们输入密码。
我提供了有关如何从 C# 应用程序执行此操作的更多信息我对这个问题的回答 https://stackoverflow.com/questions/5507818/workaround-against-registry-manipulation-limitation-in-windows-7/5508000#5508000。对于用任何其他语言编写的应用程序,您将遵循类似的步骤;您只是调用 Windows API 中内置的函数。
-
The better不过,选择是修改您的应用程序,以便它doesn't必须写入系统文件夹。这样,您就不必以管理权限运行。这是所有标准 Windows 应用程序的预期模型。 Microsoft 至少从 Windows 2000 早期就开始推荐它,但直到 Vista 才真正强制您遵循它。
我更多地讨论应用程序具有写入权限的各个位置(以及每个位置的各种用途)我对这个问题的回答 https://stackoverflow.com/questions/5210575/does-windows-7-have-the-same-problem-as-vista/5210642#5210642.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)