检查程序是否存在,如果不存在则安装
Check if a program exists and if not to install it
我正在使用 NSIS 文件编写 Jenkins 构建。我需要一个脚本来检查设备上是否安装了某个程序,如果没有,它应该从安装程序文件夹中安装 .exe。安装程序工作所需的安装文件夹中有所有 .exe。
这应该很简单,但我对这种情况感到困惑,无法在任何地方找到有关此的任何信息。
我想您使用的是 windows 环境。您可以编写一个 powershell 脚本来检查它:
Get-ItemProperty HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\* | Select-Object DisplayName | Select-String 'Microsoft Visual C\+\+'
这将列出所有已安装的 Visual C++ Redistributables
在我的机器上看起来像这样:
@{DisplayName=Microsoft Visual C++ 2005 Redistributable (x64)}
@{DisplayName=Microsoft Visual C++ 2010 x64 Redistributable - 10.0.40219}
@{DisplayName=Microsoft Visual C++ 2012 x64 Additional Runtime - 11.0.61030}
@{DisplayName=Microsoft Visual C++ 2008 Redistributable - x64 9.0.30729.6161}
@{DisplayName=Microsoft Visual C++ 2005 Redistributable (x64)}
@{DisplayName=Microsoft Visual C++ 2008 Redistributable - x64 9.0.30729.17}
@{DisplayName=Microsoft Visual C++ 2013 x64 Additional Runtime - 12.0.21005}
@{DisplayName=Microsoft Visual C++ 2013 x64 Designtime - 12.0.21005}
@{DisplayName=Microsoft Visual C++ 2015 x64 Debug Runtime - 14.0.23506}
@{DisplayName=Microsoft Visual C++ 2015 x64 Minimum Runtime - 14.0.23506}
@{DisplayName=Microsoft Visual C++ 2013 x64 Minimum Runtime - 12.0.21005}
@{DisplayName=Microsoft Visual C++ 2012 x64 Debug Runtime - 11.0.60610}
@{DisplayName=Microsoft Visual C++ 2005 Redistributable (x64)}
@{DisplayName=Microsoft Visual C++ 2015 x64 Additional Runtime - 14.0.23506}
@{DisplayName=Microsoft Visual C++ 2013 x64 Debug Runtime - 12.0.21005}
@{DisplayName=Microsoft Visual C++ 2012 x64 Minimum Runtime - 11.0.61030}
因此,如果您要检查的程序名为 ProgramWithName
,只需使用:
Get-ItemProperty HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\* | Select-Object DisplayName | Select-String ProgramWithName
如果您想知道是否安装了 SQL 服务器,请使用:
Get-ItemProperty HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\* | Select-Object DisplayName | Select-String 'Microsoft SQL Server 2014 Express'
这给你在我的机器上:
@{DisplayName=Microsoft SQL Server 2014 Express LocalDB }
我正在使用 NSIS 文件编写 Jenkins 构建。我需要一个脚本来检查设备上是否安装了某个程序,如果没有,它应该从安装程序文件夹中安装 .exe。安装程序工作所需的安装文件夹中有所有 .exe。
这应该很简单,但我对这种情况感到困惑,无法在任何地方找到有关此的任何信息。
我想您使用的是 windows 环境。您可以编写一个 powershell 脚本来检查它:
Get-ItemProperty HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\* | Select-Object DisplayName | Select-String 'Microsoft Visual C\+\+'
这将列出所有已安装的 Visual C++ Redistributables
在我的机器上看起来像这样:
@{DisplayName=Microsoft Visual C++ 2005 Redistributable (x64)}
@{DisplayName=Microsoft Visual C++ 2010 x64 Redistributable - 10.0.40219}
@{DisplayName=Microsoft Visual C++ 2012 x64 Additional Runtime - 11.0.61030}
@{DisplayName=Microsoft Visual C++ 2008 Redistributable - x64 9.0.30729.6161}
@{DisplayName=Microsoft Visual C++ 2005 Redistributable (x64)}
@{DisplayName=Microsoft Visual C++ 2008 Redistributable - x64 9.0.30729.17}
@{DisplayName=Microsoft Visual C++ 2013 x64 Additional Runtime - 12.0.21005}
@{DisplayName=Microsoft Visual C++ 2013 x64 Designtime - 12.0.21005}
@{DisplayName=Microsoft Visual C++ 2015 x64 Debug Runtime - 14.0.23506}
@{DisplayName=Microsoft Visual C++ 2015 x64 Minimum Runtime - 14.0.23506}
@{DisplayName=Microsoft Visual C++ 2013 x64 Minimum Runtime - 12.0.21005}
@{DisplayName=Microsoft Visual C++ 2012 x64 Debug Runtime - 11.0.60610}
@{DisplayName=Microsoft Visual C++ 2005 Redistributable (x64)}
@{DisplayName=Microsoft Visual C++ 2015 x64 Additional Runtime - 14.0.23506}
@{DisplayName=Microsoft Visual C++ 2013 x64 Debug Runtime - 12.0.21005}
@{DisplayName=Microsoft Visual C++ 2012 x64 Minimum Runtime - 11.0.61030}
因此,如果您要检查的程序名为 ProgramWithName
,只需使用:
Get-ItemProperty HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\* | Select-Object DisplayName | Select-String ProgramWithName
如果您想知道是否安装了 SQL 服务器,请使用:
Get-ItemProperty HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\* | Select-Object DisplayName | Select-String 'Microsoft SQL Server 2014 Express'
这给你在我的机器上:
@{DisplayName=Microsoft SQL Server 2014 Express LocalDB }