如何使用Windows 10中的InnoSetup将压缩文件夹解压到'Program Files'?

How to use InnoSetup in Windows 10 to extract a compressed folder to 'Program Files'?

我正在开发一个需要大量配置文件层次结构的应用程序。我正在尝试使用 InnoSetup 来构建安装程序。我没有将每个配置文件及其路径放入 .iss 文件,而是将整个层次结构放入一个 .zip 文件。该应用程序需要安装到“Program Files (x86)”中,并且配置文件层次结构需要位于与可执行文件位于同一位置的文件夹中。我的安装程序成功地将 'config.zip' 文件与应用程序的可执行文件一起放入“Program Files (x86)”,但我无法从存档中提取文件夹和文件。我考虑过使用自解压存档,但 IExpress 所需的脚本太难以管理了。我不想包含任何第三方提取程序,或依赖于在客户的计算机上找到它们。而且我不想依赖客户使用文件资源管理器来提取文件夹。

我正在使用以下代码来提取存档内容,但它不起作用。没有提取任何内容。

[Run]
; Unzip the Configuration folder
Filename: "powershell"; Parameters: "-WindowStyle Hidden -Command ""Expand-Archive -Force '{app}\Configuration.zip'"""; Flags: runascurrentuser; Description: "Install Configuration folder hierarchy"

我认为这是一个 'permissions' 问题,但我找不到解决该问题的必要设置。这是整个 .iss 文件:

; Dummy

[Setup]
WizardStyle=modern
SetupLogging=yes
AppName=Dummy
AppVersion=1.0
VersionInfoVersion=1.0
DefaultDirName={commonpf}\Dummy
DefaultGroupName=Dummy
;SourceDir="Dummy"
; If you set 'SourceDir', you must force 'OutputDir' to be where you want it.
;OutputDir="Setup"
OutputBaseFilename={#SetupSetting("AppName")}_Setup

; Files section (i.e. the .exe file)
[Files]
Source: "Dummy.exe"; DestDir: "{app}"
Source: "Configuration.zip"; DestDir: "{app}"

; Icons section - Defines shortcuts to be created.
[Icons]
Name: "{commondesktop}\Dummy"; Filename: "{app}\Dummy.exe"; Tasks: "desktopicons"; Comment: "Dummy Application."
Name: "{commondesktop}\Uninstall Dummy"; Filename: "{uninstallexe}"; Tasks: "desktopicons"; 
Name: "{group}\Dummy"; Filename: "{app}\Dummy.exe"; Comment: "Dummy Application."
Name: "{group}\Uninstall Dummy"; Filename: "{uninstallexe}";

; Tasks section - Defines user-customizable tasks
[Tasks]
Name: "desktopicons"; Description: "Create desktop icons"

; Run section
[Run]
; Unzip the Configuration folder
;Filename: "powershell"; Parameters: "-WindowStyle Hidden -Command ""Expand-Archive -Force 'Configuration.zip'"""; Flags: runhidden; Description: "Install Configuration folder hierarchy"
Filename: "powershell"; Parameters: "-WindowStyle Hidden -Command ""Expand-Archive -Force '{app}\Configuration.zip'"""; Flags: runascurrentuser; Description: "Install Configuration folder hierarchy"

; UninstallDelete section - Clean-up the Configurations folder
[UninstallDelete]
Type: filesandordirs; Name: "{app}\Configuration"
;Type: dirifempty; Name: "{app}"

; End of Script

其他信息:运行安装程序后,如果我从安装 .zip 文件的文件夹中的批处理文件中 运行 PowerShell 命令,我得到:

C:\Program Files (x86)\Dummy>powershell -command "Expand-Archive -Force 'Configuration.zip'"
   New-Item : Access to the path 'Configuration' is denied.
   At
   C:\WINDOWS\system32\WindowsPowerShell\v1.0\Modules\Microsoft.PowerShell.Archive\Microsoft.PowerShell.Archive.psm1:393 char:25
      + ...             New-Item -Path $resolvedDestinationPath -ItemType Directo ...
      +                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
         + CategoryInfo          : PermissionDenied: (C:\Program File...y\Configuration:String) [New-Item], UnauthorizedAccessException
         + FullyQualifiedErrorId : CreateDirectoryUnauthorizedAccessError,Microsoft.PowerShell.Commands.NewItemCommand

您不需要压缩文件夹。 Inno-Setup 可以为您处理所有这一切。 (谢谢@Bill_Stewart!)

这消除了在 [运行] 部分调用 PowerShell 的需要。

[Files]
Source: "Dummy.exe"; DestDir: "{app}"
Source: "Configuration\*"; DestDir: "{app}\Configuration"; Flags: recursesubdirs createallsubdirs