如何检查 NSIS 中特定端口上运行的进程

     2023-04-18     311

关键词:

【中文标题】如何检查 NSIS 中特定端口上运行的进程【英文标题】:How to check the process running on specific port in NSIS 【发布时间】:2012-05-06 22:58:02 【问题描述】:

我正在使用 NSIS 为我的应用程序开发安装程序。我需要对此安装程序做的是检查端口 80 是否可用,如果可用,请继续安装程序,如果它没有给出错误消息,其中包含在端口 80 上运行的进程名称。

我找到了一种方法来检查端口 80 是否可用。为此,我使用 Ports.nsh 作为插件。 http://nsis.sourceforge.net/Check_open_ports

$If $TCPPortOpen 80
 MessageBox MB_OK|MB_ICONSTOP "PORT 80 is already using by another program..."
 Abort
$EndIf

但是,我无法在该端口上找到正在运行的进程。我需要给出一条错误消息,例如

//Skype is running on port 80 and close Skype to continue with the installation. 

有人可以帮我解决这个问题吗?谢谢。

【问题讨论】:

【参考方案1】:

由于我在 nsis 中找不到合适的方法来执行此操作,因此我只使用 VBScript 来检查进程名称并通过 nsis 脚本调用它。以下是代码。

//TestPort80.vbs

Dim WshShell, oExec, key
Set WshShell = CreateObject("WScript.Shell")
Set oExec = WshShell.Exec("netstat -o -n -a")
key = "0.0:80"

Dim values
values = checkPortStatus(oExec, key)
portInUse = values(0)
input = values(1)

If portInUse Then
  x = InStrRev(input, " ")

  ProcessID = Mid(input, x+1)

  commandTxt = "tasklist /FI " & Chr(34) & "PID eq " & ProcessID & Chr(34)

Dim oExec2, key2
Set oExec2 = WshShell.Exec(commandTxt)
key2 = ProcessID

Dim values2
values2 = checkPortStatus(oExec2, key2)
Found = values2(0)
input2 = values2(1)

If Found Then
    y = InStr(input2, " ")
    ExeName = Left(input2, y-1)
        WScript.StdOut.WriteLine "Port 80 is using by " & ExeName
End If
End If
'## If we explicitly set a Success code then we can avoid this.
WScript.Quit 512

Function checkPortStatus(oExec, key)
portInUse = false
input = ""
Do While True

     If Not oExec.StdOut.AtEndOfStream Then
          input = oExec.StdOut.ReadLine()
          If InStr(input, key) <> 0 Then 
        ' Found Port 80
                portInUse = true
                Exit DO
          End If
     Else
        Exit DO
     End If
     WScript.Sleep 100
Loop

Do While oExec.Status <> 1
 WScript.Sleep 100
Loop
Dim values(1)
values(0) = portInUse
values(1) = input

checkPortStatus = values

End Function

//Installer.nsi

$If $TCPPortOpen 80
 GetTempFileName $0
     File /oname=$0 `TestPort80.vbs` 
     nsExec::ExecToStack `"$SYSDIR\CScript.exe" $0 //e:vbscript //B //NOLOGO`
 Pop $0
 Pop $1
 MessageBox MB_OK|MB_ICONSTOP '$1'
 Abort
$EndIf

【讨论】:

如何在linux中删除在特定端口上运行的进程

参考技术A以80端口为例。首先,列出任何监听端口80的进程:使用kill命令删除任何监听端口80的进程:或使用fuser命令: 查看详情

text检查特定端口上正在运行的进程(代码片段)

查看详情

使用特定端口检查服务器上的状态

】使用特定端口检查服务器上的状态【英文标题】:Checkstatusontheserverwithspecificport【发布时间】:2015-03-2712:15:38【问题描述】:我需要检查本地网络中任何计算机的状态。但是我的代码无效,因为响应时间很长。我尝试了线程,... 查看详情

如何清除目标端口上运行的进程?

】如何清除目标端口上运行的进程?【英文标题】:HowcanIcleartheprocessrunningonmytargetport?【发布时间】:2022-01-1302:38:25【问题描述】:我一直在关注thisarticle,试图从头开始创建我的第一个FlaskAPI。我不得不在工作中更新我的电脑,... 查看详情

如何确保进程在特定的物理 CPU 内核和线程中运行?

】如何确保进程在特定的物理CPU内核和线程中运行?【英文标题】:HowcanIensurethataprocessrunsinaspecificphysicalCPUcoreandthread?【发布时间】:2012-02-2122:22:45【问题描述】:Thisquestion询问是否确保两个进程在同一个CPU上运行。使用sched_seta... 查看详情

检查进程是不是在 Windows 上运行?

】检查进程是不是在Windows上运行?【英文标题】:CheckifaprocessisrunningornotonWindows?检查进程是否在Windows上运行?【发布时间】:2011-12-0821:12:00【问题描述】:我正在尝试创建一个python脚本,稍后我将作为服务运行该脚本。现在我... 查看详情

sh如何检查特定端口上的服务器连接(ping)(代码片段)

查看详情

如何获取特定进程的pid

】如何获取特定进程的pid【英文标题】:howdoIgetthepidofaspecificprocess【发布时间】:2015-02-1621:41:26【问题描述】:我正在编写一个使用SSH连接到删除服务器的PHP脚本。我需要做的是检查特定进程是否正在运行,以便我可以终止它。... 查看详情

在mac终端中,如何查看mysql在哪个端口运行?

】在mac终端中,如何查看mysql在哪个端口运行?【英文标题】:Inmacterminal,howtocheckwhichportmysqlisrunning?【发布时间】:2019-10-1413:26:12【问题描述】:我进行了一些研究,发现了一些人们建议使用netstat来检查特定进程正在使用哪个端... 查看详情

如何允许来自特定 IP 的特定端口上的传入连接

】如何允许来自特定IP的特定端口上的传入连接【英文标题】:HowtoallowincomingconnectiononaparticularportfromspecificIP【发布时间】:2017-09-2317:09:33【问题描述】:我在docker容器中运行mongodb,27017端口与主机公开以允许远程传入连接。我... 查看详情

如何修复:MySQL 无法启动:错误“另一个 mysqld 服务器在端口:3306 上运行?” - 检查端口,它是免费的

】如何修复:MySQL无法启动:错误“另一个mysqld服务器在端口:3306上运行?”-检查端口,它是免费的【英文标题】:Howtofix:MySQLcannotstart:Error"anothermysqldserverrunningonport:3306?"-checkedportanditisFREE【发布时间】:2021-06-1518:54:40【... 查看详情

golang中如何将一个进程绑定到一组cpu上?

】golang中如何将一个进程绑定到一组cpu上?【英文标题】:Howtobindaprocesstoasetofcpuingolang?【发布时间】:2021-09-2918:34:59【问题描述】:我使用os/execpkg来运行一个进程。我想检查它的cpu亲和力并修改它以将进程绑定到特定的cpu集。... 查看详情

用于检查特定 php 进程是不是正在运行的 Bash 脚本?

】用于检查特定php进程是不是正在运行的Bash脚本?【英文标题】:Bashscripttocheckaspecificphpprocessisrunning?用于检查特定php进程是否正在运行的Bash脚本?【发布时间】:2015-08-1305:29:12【问题描述】:我正在使用如下的nohup命令运行webs... 查看详情

如何在 NSIS 脚本中使用 REMOVE 或 REPAIR 功能?

】如何在NSIS脚本中使用REMOVE或REPAIR功能?【英文标题】:HowtouseREMOVEorREPAIRfeatureinNSISscript?【发布时间】:2012-11-1509:16:49【问题描述】:我已经使用nsis脚本来创建安装程序。当我以相同的名称第二次运行我的安装程序时,应该检... 查看详情

如何在运行时 (NSIS) 中获取 nsh 代码中丢失的 dll 文件错误回调

】如何在运行时(NSIS)中获取nsh代码中丢失的dll文件错误回调【英文标题】:Howtogetmissingdllfileerrorcallbackinnshcodeinruntime(NSIS)【发布时间】:2019-04-1503:31:13【问题描述】:我正在使用NSIS为我的软件创建安装程序。我的软件依赖于Micros... 查看详情

如何停止在端口 3000 上运行 rails 服务器的 nohup 进程

】如何停止在端口3000上运行rails服务器的nohup进程【英文标题】:Howtostopanohupprocessrunningrailsserveronport3000【发布时间】:2019-05-2604:45:09【问题描述】:我已经使用以下命令启动了一个Rails服务器puma。nohuprailsserver&它的输出是[2]22... 查看详情

如何检查正在运行的进程是不是是后台进程? [关闭]

】如何检查正在运行的进程是不是是后台进程?[关闭]【英文标题】:HowdoIcheckifarunningprocessisabackgroundprocess?[closed]如何检查正在运行的进程是否是后台进程?[关闭]【发布时间】:2016-06-1905:03:45【问题描述】:我目前正在获取我... 查看详情

NSIS 的卸载程序运行速度非常快

...ast【发布时间】:2015-06-1109:42:04【问题描述】:我不知道如何说它是title的缩写,但是当我在静默模式下运行NSIS生成的卸载程序时,它会从主进程中分离出来并在后台工作。这很好,但是当安装程序首先运行ExecWaituninstaller时,... 查看详情