在zip中运行exe而不提取
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在zip中运行exe而不提取相关的知识,希望对你有一定的参考价值。
我有一个包含安装程序的.zip(setup.exe和相关文件)。如何在不解压缩zip的情况下在PowerShell脚本中运行setup.exe
?
另外,我需要将命令行参数传递给setup.exe。
我试过了
& 'C:myzip.zipsetup.exe'
但是我收到了一个错误
...不被识别为cmdlet,函数,脚本文件或可操作程序的名称。
这打开了exe:
explorer 'C:myzip.zipsetup.exe'
但我不能传递参数。
答案
你问的是不可能的。您必须解压缩zip文件才能运行可执行文件。 explorer
语句仅起作用,因为Windows资源管理器在后台透明地执行提取。
你可以做的是编写一个自定义函数来封装提取,调用和清理。
function Invoke-Installer {
Param(
[Parameter(Mandatory=$true)]
[ValidateScript({Test-Path -LiteralPath $_})]
[string[]]$Path,
[Parameter(Manatory=$false)]
[string[]]$ArgumentList = @()
)
Begin {
Add-Type -Assembly System.IO.Compression.FileSystem
}
Process {
$Path | ForEach-Object {
$zip, $exe = $_ -split '(?<=.zip)\+', 2
if (-not $exe) { throw "Invalid installer path: ${_}" }
$tempdir = Join-Path $env:TEMP [IO.File]::GetFileName($zip)
[IO.Compression.ZipFile]::ExtractToDirectory($zip, $tempdir)
$installer = Join-Path $tempdir $exe
& $installer @ArgumentList
Remove-Item $tempdir -Recurse -Force
}
}
}
Invoke-Installer 'C:myzip.zipsetup.exe' 'arg1', 'arg2', ...
请注意,这需要.Net Framework v4.5或更高版本。
以上是关于在zip中运行exe而不提取的主要内容,如果未能解决你的问题,请参考以下文章