将多个参数传递给 Advanced Installer 中的 Powershell 内联脚本

Pass multiple parameter to Powershell inline script in Advanced Installer

我正在使用高级安装程序创建 msi 程序包我想在安装完成后将一些文件和文件夹复制到“[APPDIR]”(我知道我可以通过将文件和文件夹添加到高级文件和文件夹部分来做到这一点安装程序,但我不想这样做,因为我的文件和文件夹在客户机器的每个安装中都是动态的) 我写了一个内联的 PowerShell 脚本,如下所示

> Param( [string] $source, [string] $dest )
$exclude = @('web.config')
> Get-ChildItem $source -Recurse -Exclude $exclude | Copy-Item
> -Destination {Join-Path $dest $_.FullName.Substring($source.length)}

在参数部分,我这样填写"[SourceDir]Project", "[APPDIR]Project"

但它不起作用。为什么?

视情况而定,您需要提供更多详细信息。您的 PS 自定义操作的执行设置是什么?

您是否检查过 verbose log 以查看参数是否正确传递?

您的自定义操作应安排为延迟且没有模拟,因此它在安装程序包创建 APPDIR 文件夹后执行,并且它具有在该位置写入的所有权限。

此外,您应该添加回滚和卸载自定义操作来清理文件,因为在卸载或 canceled/failed 安装期间,这些资源不会被 Windows 安装程序清理。

Abbas 已经确认 问题是 命令行(参数)语法之一 :

参数部分 - 从 Advanced Installer 传递给 PowerShell 脚本的内容 - 填写为:

"[SourceDir]Project", "[APPDIR]Project"  # !! WRONG, due to the comma

本来应该是:

"[SourceDir]Project" "[APPDIR]Project"  # OK: *space-separated* arguments

在 PowerShell 中调用 scripts/functions/cmdlets 与在 shells 中一样,而不是在编程语言中;也就是说,你必须用空格分隔传递的参数。

相比之下,在标记之间使用 , 构造一个 数组 ,作为 单个 参数传递。

来自 PowerShell 运行 Get-Help about_Command_Syntax 了解更多信息。