Что нового

проверка на процесс из определенной папки

cdjsend

Новичок
Сообщения
48
Репутация
0
Нужно проверить запущен ли процесс из определенной папки, если не запущен то запустить

Код:
#include <Array.au3>
#include <WinAPIEx.au3>

$result = ProcessList("build.exe")
;_ArrayDisplay($result)


If $result[0][0] = 0 Then
   Run("C:\build\build.exe")
Else
   For $i = 1 To UBound($result) -1
      $result[$i][0] = _WinAPI_GetProcessFileName($result[$i][1])
   Next

$search = _ArraySearch($result, "C:\build\build.exe")
_ArrayDisplay($result)

   If @error  Then
  Run("C:\build\build.exe")
   EndIf


EndIf


есть вот такой код но он не работает
 

hedji

Продвинутый
Сообщения
400
Репутация
82
Файла build.exe у меня нет, сделал для SciTE.exe.

Код:
#include <Array.au3>
#include <WinAPIEx.au3>

$result = ProcessList("SciTE.exe")
$count = 0

If $result[0][0] = 0 Then
   Run("C:\Program Files (x86)\AutoIt3\SciTE\SciTE.exe")
Else
   For $i = 1 To UBound($result) -1
      $name = _WinAPI_GetProcessFileName($result[$i][1])
	  If (StringInStr($name, "C:\Program Files (x86)\AutoIt3\SciTE\SciTE.exe")) Then
		  $count = $count + 1
	  EndIf
   Next
   If $count = 0 Then
	  Run("C:\Program Files (x86)\AutoIt3\SciTE\SciTE.exe")
   EndIf
EndIf
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8 166
Репутация
2 331
Мой вариант:

Код:
#include <WinAPIEx.au3>

$sPath = 'C:\build\build.exe'

$iPID = _ProcessExistsEx($sPath)

If Not $iPID Then
   Run($sPath)
Else
   MsgBox(64, @ScriptName, 'Path [' & $sPath & '] exists as process:' & @CRLF & $iPID, 0, Default)
EndIf

Func _ProcessExistsEx($sNameOrFile)
	Local $aFile = StringRegExp($sNameOrFile, '^(.+)\\([^\\]+)$', 3)
	
	If UBound($aFile) > 1 Then
		Local $aList = ProcessList($aFile[1])
		
		For $i = 1 To UBound($aList) - 1
			If _WinAPI_GetProcessFileName($aList[$i][1]) = $sNameOrFile Then
				Return $aList[$i][1]
			EndIf
		Next
		
		Return 0
	EndIf
	
	Return ProcessExists($sNameOrFile)
EndFunc
 
Верх