Inno Setup-更改目录权限不会影响时间

问题描述

我有安装在 C:// ProgramFiles 中的应用程序。我需要对用户组具有完全访问权限的安装目录才能处理应用程序的更新过程(文件下载,移动,删除,写入)。所以我如下更新了inno-script。

[InstallDelete]
Type: filesandordirs; Name: "{app}\assets"; BeforeInstall: TaskKill()

[Dirs]
Name: "{app}\assets"; Permissions: users-full; Flags: uninsalwaysuninstall;

[Files]
; Change file path when necessary
; Service,Launcher,Killer,runtime Binaries
Source: "..\..\_Source\Bin\*"; DestDir: "{app}"; Flags: recursesubdirs ignoreversion;

_Source \ Bin 文件夹(包含所有文件的Source文件夹)中,有一些文件和assert文件夹。

问题是,安装没有及时更改用户组的 assert 文件夹权限。 (大多数情况下工作正常)。这是两个有无问题的日志的比较。

Installer log comparison with and without issue

请提出任何想法或任何可能的方法来克服此问题。

解决方法

查阅安装程序的日志后,我发现在文件复制时重新创建了授予权限的文件夹。

因此,我决定在安装程序完成后通过执行Windows icacls命令来设置用户权限。因此,我按如下所示更改了脚本,然后按预期工作了。

// Following method will execute to grant user permisions after installation //
procedure PermissionUpdate();
var
  ResultCode: integer;
begin
  Log(ExpandConstant('Giving user group permission :O - CODE: - ' + ExpandConstant('"{app}/assets" /grant *S-1-5-32-545:(OI)(CI)M /t /c /q')));
  
  if Exec('icacls.exe',ExpandConstant('"{app}/assets" /grant *S-1-5-32-545:(OI)(CI)M /t /c /q'),'',SW_HIDE,ewWaitUntilTerminated,ResultCode) then
  begin
    Log('Successfully gave user group permission :)' + IntToStr(ResultCode));
  end
  else begin
    Log('Giving user group permission unsuccessfull :('  + IntToStr(ResultCode));
  end;
end;

procedure CurStepChanged(CurStep: TSetupStep);
begin
  if (CurStep=ssInstall) then
  begin
    if (IsUpgrade()) then
    begin
      UnInstallOldVersion();
    end;
  end
  else if (CurStep=ssPostInstall) then
  begin
    PermissionUpdate();
  end;
end;

因此,在此修复程序CurStepChanged中,方法是安装程序的事件处理程序。我使用安装后步骤(CurStep=ssPostInstall)运行权限更新方法。 在执行icacls方法时,S-1-5-32-545是用户组的security identifier

这可能不是我发布的解决方案,但此修复程序对我有用。