InstallShield 打包的 exe 如何静默安装

最近公司部署一个项目,对方发了个 exe 文件需要安装到每台计算机。可它并不支持常规 /S 选项静默安装。可一个个点也太繁琐了,还影响别人工作。

通过解包发现该 exe 是通过 InstallShield 打包的。

一番搜索,结果寥寥无几。点击了个意外的标题。找到如下文章

https://www.sysadm.cc/index.php/xitongyunwei/755-installshield-silent-mode

不过写的乱七八糟的,博主脾气有点暴躁。不过还是感谢他。其实就是如下步骤:

1,用这个 exe,比如他的名字是 life90.exe 在 CMD 执行如下:
life90.exe /r /fi”c:\wor\setup.iss” #路径需要绝对路径,并且这个目录有写入权限。
此时会弹出安装对话框,按你需要的一步步点下去即可。等待程序安装完成。
2,用上述命令生成的 iss 文件,配合以下参数,即可在所有电脑按你刚才所点击的需求静默安装:
life90.exe /s /fi”c:\wor\setup.iss” # 这个引号的路径你可以自定义,但不能是网络路径

利用 PowerShell 脚本批量卸载软件

搜来搜去都找不到现成的,只好用自己蹩脚的编程基础写一个。记录下

# 获取所有已安装软件的信息,并过滤包含"chrone"关键字的软件
$products = Get-WmiObject Win32_Product | Where-Object {$_.Name -like "*chrome*" -or $_.Caption -like "*chrome*"}

# 如果找到匹配的软件,则直接进行卸载
if ($products) {
    Write-Host "正在卸载包含'chrome'关键字的软件..."

    foreach ($product in $products) {
        $msiexecCommand = "{0}" -f $product.IdentifyingNumber
        Write-Output $msiexecCommand
        try {
            & msiexec.exe /x "`"$msiexecCommand`"" /qn
            Write-Host "已成功卸载:$($product.Name)"
        } catch {
            Write-Host "卸载 $($product.Name) 失败:$($_.Exception.Message)"
        }
    }
} else {
    Write-Host "未找到包含'chrome'关键字的软件。"
}

其实我也写了其他写法,比如通过注册表获取程序列表。

# 获取所有安装的程序
$programs = Get-ItemProperty 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\*', Directory, DisplayName, Publisher -ErrorAction SilentlyContinue

# 筛选出包含 "Check Point" 的程序
$unPrograms = $programs | Where-Object { $_.DisplayName -like "*RealVNC*" -or $_.Publisher -like "*RealVNC*" }

# 输出结果
if ($unPrograms) {
    Write-Host "找到以下包含 'RealVNC' 的软件:"
    $unPrograms | Format-Table DisplayName, Publisher -AutoSize
    

} else {
    Write-Host "未找到包含 'RealVNC' 的软件。"
}

但是注册表很多软件不会写入进去,导致根本没有相关信息。反倒是 Get-WmiObject Win32_Product 这个方法能获取对象。比较通用。程序员的世界,程序果真写的五花八门。