我正在使用高级安装程序创建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"
但它不起作用。为什么呢?
答案 0 :(得分:1)
Abbas已经确认问题是命令行(参数)语法 之一:
参数部分 - 从Advanced Installer传递给PowerShell脚本的内容 - 填写为:
"[SourceDir]Project", "[APPDIR]Project" # !! WRONG, due to the comma
应该是:
"[SourceDir]Project" "[APPDIR]Project" # OK: *space-separated* arguments
在PowerShell中调用脚本/函数/ cmdlet的工作方式与 shells 中的相同,而不像在编程语言中那样;也就是说,您必须将传递的参数与空格分开。
相比之下,在令牌之间使用,
构造一个数组,它作为单个参数传递。
从PowerShell运行Get-Help about_Command_Syntax
获取更多信息。
答案 1 :(得分:0)
这取决于你需要提供更多细节。 PS自定义操作的执行设置是什么?
您是否检查过verbose log以确定params是否正确传递?
您的自定义操作应安排为延迟且不进行模拟,因此在安装程序包创建APPDIR文件夹后执行,并且它具有在该位置写入的所有权限。
此外,您应该添加回滚和卸载自定义操作来清理文件,如在卸载或取消/失败安装期间,Windows Installer将不会清除这些资源。