在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而不提取的主要内容,如果未能解决你的问题,请参考以下文章

访问 .zip 存档中的文件而不提取它们

提取EXE中的文件

将 zip 文件的内容作为 StorageFile 对象读取而不提取?

自安装 Zip 档案(解压后运行应用程序)

防病毒阻止exe文件被提取?

如何在不提取的情况下从 zip 设置图片框图像位置?