Newsgroup: it.comp.os.win.xp
Titolo: Scheduler e PID

Ciao a tutti,
chiedo aiuto qui perché anche con google ed il sito MS non sono
approdato a nulla.
Devo lanciare un'applicazione ogni ora, ma prima si deve chiudere
l'istanza precedente.
Avevo ipotizzato un batch con prima un comando kill quindi un at,
proprio perché il comando at mi permette di specificare il PID
manualmente (altrimenti sarebbe casuale).
Non posso ricorrere al nome immagine perché sulle macchine girano più
istanze, ed io devo aprire e chiudere solo un'istanza specifica.
Ho trovato anche il comando schtasks, fa quasi qualunque cosa ma non mi
permette di specificare il PID.
Potete indicarmi come risolvere questo problema senza ricorrere a SW di
terze parti?
Se poi mi date un sistema che funziona anche sotto W2K, meglio :)
Grazie mille a chiunque si lambiccherà il cervello :)
V²

 terze parti?
Mi sfugge una cosa. Ammesso che l'ID di at sia il PID del processo
perchè kill non va bene?
Comunque puoi usare anche pskill
http://www.sysinternals.com/Utilities/PsKill.html
 (non è di terze
parti visto che MS l'ha appena comprata...).
bye

 perchè kill non va bene?
Il kill va benissimo!
E' chi lancia l'istanza il problema.
"at" permette di specificare il PID.
"schtasks" no.
Ed a me serve chiudere un'istanza precisa :(

Valeren ha scritto:

Sorry, non avevo capito nulla. Mò vedo se mi viene in mente qualcosa.
Comunque sei sicuro che si possa decidere il PID?
bye

 Comunque sei sicuro che si possa decidere il PID?
No prob :)
Confermo che con "at" si possa decidere il PID.

 ma non ne sono sicuro)
Il kill non è un problema.
A me serve un sistema per lanciare un'applicazione ogni ora con un PID
preciso, in modo che il kill successivo la identifichi in modo univoco.
Ho verificato anche PsExec e non ha questa funzione, al momento sembra
prsente solo per "at".
V²

 I am not clear with ur solution ,if u will please make it more clear.
it's long time since  your original post, I don't recall .. maybe this :  >>>  or [2]
If you launch yourself  you can store (and close) single PIDs :
;$PID = ProcessExists("notepad.exe")
 ;If $PID Then ProcessClose($PID)
 $PID1 = Run("notepad")
 $PID2 = Run("notepad")
 $PID3 = Run("notepad")
 MsgBox(262144, "", $PID1)
; MsgBox(262144, "", $PID2)
; ecc
; List just notepad.exe processes
$list = ProcessList("notepad.exe")
for $i = 1 to $list[0][0]
  msgbox(0, $list[$i][0], $list[$i][1])
next
ProcessClose($PID2)
ProcessClose($PID1)
;;; [2]   ProcessList
--------------------------------------------------------------------------------
Returns an array listing the currently running processes (names and PIDs).
ProcessList ( ["name"] )
Parameters
name [Optional] If a name is given only processes of the same name will be returned.
Return Value
Success: An array of process names and PIDs (See Remarks).
Failure: @error is set to 1.
Remarks
The array returned is two-dimensional and is made up as follows:
$array[0][0] = Number of processes
$array[1][0] = 1st Process name
$array[1][1] = 1st Process ID (PID)
$array[2][0] = 2nd Process name
$array[2][1] = 2nd Process ID (PID)
....
$array[n][0] = nth Process name
$array[n][1] = nth Process ID (PID)
--
Fosco

 --------------------------------------------------------------------------------
Maggiori info su Process**
ProcessExists
--------------------------------------------------------------------------------
Checks to see if a specified process exists.
ProcessExists ( "process" )
Parameters
process The name or PID of the process to check.
Return Value
Success: Returns the PID of the process.
Failure: Returns 0 if process does not exist.
Remarks
Process names are executables without the full path, e.g., "notepad.exe" or "winword.exe"
PID is the unique number which identifies a Process.
In order to work under Windows NT 4.0, ProcessExists requires the file PSAPI.DLL (included in the AutoIt installation
directory).
The process is polled approximately every 250 milliseconds.
Related
ProcessClose, ProcessWait, ProcessWaitClose, WinExists
--
Fosco

 ' e fare TUTTO all'interno dello script [3]
http://www.hiddensoft.com/autoit3/
; 6000 sono in millisecondi (8 secondi) messi come test d'esempio
; aumentare ad  un'ora per l'uso effettivo
; (la CPU e' memoria sono meno impegnate che col scheduler)
While 1
    Sleep (6000)
 If ProcessExists("notepad.exe") then
  MsgBox(262144, "","chiudo l'esistente e ne apro uno nuovo")
  ProcessClose("notepad.exe")
 EndIf
  ;Run("C:\WINDOWS\NOTEPAD.EXE")
Run("NOTEPAD.EXE")
 WEnd
 ; click destro sull'icona nella tray ed exit per interrompere
;Copia incolla su notepad e salva con estensione .au3
;tutti i file (*.*)  poi ci clicchi sopra. (per esempio Test.au3)
;se ti da' errore disattiva l'antivirus
--
Fosco

 ; 6000 sono in millisecondi (8 secondi)
6 secondi of course
--
Fosco