Inno setup 使用InnoSetup递归设置文件夹权限

Inno setup 使用InnoSetup递归设置文件夹权限,inno-setup,Inno Setup,我有一个文件夹树,可以复制到C:\ProgramData。我正在安装的软件(不要为此责备我,我没有设计、编写或设计它)要求每个人都能完全控制这些数据 所以我在[Files]部分L中放了下面一行 Source: "C:\ProgramData\PFPS\MapDataServer\*"; DestDir: "C:\ProgramData\PFPS\FalconViewCommand"; Flags: ignoreversion createallsubdirs recursesubdirs; Pe

我有一个文件夹树,可以复制到C:\ProgramData。我正在安装的软件(不要为此责备我,我没有设计、编写或设计它)要求每个人都能完全控制这些数据

所以我在[Files]部分L中放了下面一行

Source: "C:\ProgramData\PFPS\MapDataServer\*"; DestDir: "C:\ProgramData\PFPS\FalconViewCommand"; Flags: ignoreversion createallsubdirs recursesubdirs; Permissions: everyone-full; Excludes: "*.LDF"
是的,这确实让每个人都能完全控制每个单独的文件,但是程序需要创建文件,并且没有为每个人设置文件夹权限(目录)

我试图添加[Dirs]部分,但没有成功:

[Dirs]
Name: "C:\ProgramData\PFPS\FalconViewCommand"; Flags: uninsalwaysuninstall; Permissions: everyone-full

上师怎么说

我一直在做的是最后一次运行,我发现Dirs不起作用(是的,在测试安装脚本时,我总是执行完整的unistall),否则您如何知道产品发货时会发生什么

我同意你关于{commonappdata}的看法,但我正在努力消除随机性,直到我弄清问题的真相

以下是我一直在尝试的:

[Run]
Filename: "C:\Windows\System32\icacls.exe"; Parameters: "C:\ProgramData\PFPS\FalconViewCommand /grant:r Users:(OI)(CI)F"; WorkingDir: "{tmp}"; Description: "Changing Directory Permissions"; StatusMsg: "Changing Directory Permissions"
这对我很有用:

[Dirs]    
Name:"{app}\"; Permissions:everyone-modify

[Dirs]
条目应该可以工作,除了您应该使用
{commonappdata}
而不是硬编码
C:\ProgramData
。(是的,授予这样的权限通常是一个设计糟糕的应用程序的标志。)在运行安装之前,您是否尝试过先完全卸载该应用程序,并确保该文件夹不存在?@Miral授予ProgramData权限怎么会是一个糟糕的设计?建议在这里存储系统范围的应用程序设置……首先,因为大多数人默认需要系统范围的设置,因为他们根本没有充分考虑到这一点,意识到人们可能希望在用户级别上对其进行定制。(这更简单,不是更好。)第二,因为所有用户都可以写的任何东西都会被所有用户(或其帐户中运行的病毒)固有地破坏,从而增加这种破坏的影响。最后一个原因是,所有用户都可以阅读的任何内容都可能侵犯隐私。显然,并不是所有这些论点都适用于所有问题,但令人惊讶的是,很少有人这样想。我遇到的情况是,客户具有严格的文件夹安全性和审核。有一个免费的工具可以检查分层权限,这非常有用(而且很简单)-千万不要对
{app}
或任何其他可以保存可执行文件的位置执行此操作。共享数据/设置仍然很危险(但攻击面较小),具体取决于它们的使用方式。次要的一点是,卸载可能与干净安装不同。请注意,icacls在Windows XP中不可用。从Win7复制的应用程序无法运行(不是win32应用程序,必须用.NET或其他语言编写),而从Windows Server 2003复制的应用程序功能有限。