Inno Setup - 更改目录权限不影响时间
Inno Setup - Change directory permission not affect time to time
我有安装在 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文件夹(包含所有文件的源文件夹)中有一些文件和断言文件夹。
问题是,安装没有更改用户组 的assert 文件夹权限。 (大多数时候工作正常)。这是有问题和没有问题的两个日志的比较。
请提供解决此问题的任何想法或任何可能性。
参考安装程序的日志后,我发现在复制文件时重新创建了权限授予的文件夹。
所以我决定在安装程序后执行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
方法是安装程序的事件处理程序。我使用 post 安装步骤 (CurStep=ssPostInstall
) 到 运行 权限更新方法。
在执行icacls
方法时,S-1-5-32-545
对于用户组是security identifier。
这可能不是我 post 找到的解决方案,但这个修复对我有用。
我有安装在 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文件夹(包含所有文件的源文件夹)中有一些文件和断言文件夹。
问题是,安装没有更改用户组 的assert 文件夹权限。 (大多数时候工作正常)。这是有问题和没有问题的两个日志的比较。
请提供解决此问题的任何想法或任何可能性。
参考安装程序的日志后,我发现在复制文件时重新创建了权限授予的文件夹。
所以我决定在安装程序后执行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
方法是安装程序的事件处理程序。我使用 post 安装步骤 (CurStep=ssPostInstall
) 到 运行 权限更新方法。
在执行icacls
方法时,S-1-5-32-545
对于用户组是security identifier。
这可能不是我 post 找到的解决方案,但这个修复对我有用。