批处理文件以静默方式安装多个程序

3
我希望创建一个批处理文件,可以按顺序安装多个程序。 我能够使用以下代码在批处理文件中按顺序安装所需软件:
@echo off
"Path/software1.exe"
"Path/software2.exe"
"Path/software3.exe"
"Path/software4.exe"

或者

@echo off
start /wait "Path/software1.exe"
start /wait "Path/software2.exe"
start /wait "Path/software3.exe"
start /wait "Path/software4.exe"

在安装任何软件之前,我希望检查其是否已经安装。

我尝试使用以下两种方式获取已安装软件列表:

wmic product get name

或者

reg export HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall temp.txt /y

但是,如果我要搜索字符串,这是不可行的。因此,我想知道是否有任何命令可以使用批处理文件检查特定应用程序是否已安装?谢谢!

3个回答

1

没有正式的方法来检查应用程序是否已安装。大多数情况下,安装程序只是复制文件、设置注册表键和添加开始菜单快捷方式,而没有在Windows中注册任何内容来说明我已经被安装。

一个通用的方法来检查应用程序是否已安装是查看控制面板的添加/删除程序应用程序中是否有条目。ARP中的每个条目都可以在注册表中找到: Software\Microsoft\Windows\CurrentVersion\Uninstall (包括HKEY_CURERNT_USER和HKEY_LOCAL_MACHINE)

如果它是基于MSI的安装程序,则可能可以使用MSI API编写一些代码来查看Feature ID或Component ID是否已安装。我不知道如何在BAT文件中调用这些函数而不编译一些辅助程序。


但是在卸载列表中检查并不能保证该程序未安装。例如,xampp被安装了多次,但它不会显示在添加/删除程序列表中。 - Gaurang
所以你提出的方式对我来说并不能保证成功。 - Gaurang
@Gaurang - 这就是我第一条声明的观点。对于所有程序来说,真的不能以同样的方式完成。您必须编写代码来查找常见的安装路径、注册表键或其他证据,以确认程序已安装。而每个安装的应用程序都会有所不同。我建议使用ARP注册表作为一种大多数程序都可以使用的方法。 - selbie
@Gaurang - 另外,我从未向任何人保证我的答案能够“保证成功”。只有你自己才能保证自己的成功。 - selbie

0

你只需要考虑以下条件:

如果不存在 "C:\Program Files\software1",
则运行 "Path/software1.exe"

如果不存在 "C:\Program Files\software2",
则运行 "Path/software2.exe"

如果不存在 "C:\Program Files\software3",
则运行 "Path/software3.exe"

如果不存在 "C:\Program Files\software4",
则运行 "Path/software4.exe"


-1
这可能会有所帮助(我用它来显示完成批处理后安装的软件),就是在你的脚本末尾加上“appwiz.cpl”(不带引号)。
例如:
@echo off
C:\WINDOWS\system32>
cd C:/ (assuming files are located here)
echo You are about to install software1,2,3, press ENTER to proceed...
pause
"path\software1.exe"
"path\software2.exe"
"path\software3.exe"
appwiz.cpl

1
我看不出与问题的关系。问题是关于检查软件是否已安装。 - jeb

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接