J'ai un programme qui a tendance à se bloquer assez souvent pendant que je dors et je dois continuer à fonctionner. J'ai donc pensé que je pourrais écrire une application vb6 qui surveille la liste des processus, si quelque chose disparaît, il va le relancer. Quelqu'un sait-il d'une manière facile?Les processus de surveillance pour voir si ils se sont plantés dans vb6
Répondre
Utilisez WMI.
Si vous êtes bloqué avec VB6, recherchez sur le Web WMI + VB6.
Sinon, l'interfaçage C# et WMI est beaucoup plus facile.
Je l'ai utilisé une tâche planifiée (en cours d'exécution à chaque 10 min), à partir fichier cmd avec le contenu suivant:
tasklist | trouver "myapp.exe"> || NUL c: \ monchemin \ myapp.exe
Vous pouvez exécuter ce fichier de commande à partir VB6 Shell ou tout simplement utiliser Planificateur de tâches :)
J'utilise un programme qui exécute d'autres programmes. De cette façon, vous pouvez interroger la poignée de processus pour voir si l'application est toujours en cours d'exécution. Sinon, vous pouvez le lancer à nouveau. Cela nécessite une programmation API.
Vous pouvez utiliser EnumProcesses à la liste tous les processus dans le système au moment où vous êtes-vous courir pouvez utiliser cette déclaration pour l'utiliser
Public Declare Function EnumProcesses Lib "psapi.dll" (_
ByRef idProcess As Long, ByVal cb As Long, _
ByRef cbNeeded As Long) As Long
Avant de l'utiliser vous devez définir un tableau de long pour passer en un argument à EnumProcesses avec suffisamment d'espace pour lire tous les identifiants de processus. Vous pouvez appeler EnumProcesses deux fois pour découvrir la taille de ce tableau. Après le deuxième appel, vous pouvez commencer à boucler ce tableau et ouvrir les processus obtenant ainsi un handle utilisé de manière appropriée peut vous dire le nom du processus exécutable et comparer ces données avec le nom de l'exécutable que vous recherchez est terminé . Sinon, si ce que vous cherchez est une DLL par exemple, vous pourriez EnumProcessModules pour ce processus gérer la recherche de chaque processus en cours d'exécution pour la DLL que vous recherchez. la déclaration de EnumProcessModules est ce
Public Declare Function EnumProcessModules Lib "psapi.dll" (_
ByVal hProcess As Long, ByRef lphModule As Long, _
ByVal cb As Long, ByRef cbNeeded As Long) As Long
et le code probable que vous auriez besoin serait quelque chose comme ce code de fonction
Option Explicit
Private Declare Function OpenProcess Lib "Kernel32.dll" (_
ByVal dwDesiredAccessas As Long, ByVal bInheritHandle As Long, _
ByVal dwProcId As Long) As Long
Private Declare Function EnumProcesses Lib "psapi.dll" (_
ByRef lpidProcess As Long, ByVal cb As Long, _
ByRef cbNeeded As Long) As Long
Private Declare Function GetModuleFileNameExA Lib "psapi.dll" (_
ByVal hProcess As Long, ByVal hmodule As Long, _
ByVal moduleName As String, ByVal nSize As Long) As Long
Private Declare Function EnumProcessModules Lib "psapi.dll" (_
ByVal hProcess As Long, ByRef lphModule As Long, _
ByVal cb As Long, ByRef cbNeeded As Long) As Long
Private Declare Function TerminateProcess Lib "kernel32" (ByVal hProcess As Long, ByVal uExitCode As Long) As Long
Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
Private Const PROCESS_ALL_ACCESS As Long = &H1F0FFF
Public Function IsModuleRunning(ByVal theModuleName As String) As Boolean
Dim aProcessess(1 To 1024) As Long ' up to 1024 processess?'
Dim bytesNeeded As Long
Dim i As Long
Dim nProcesses As Long
Dim hProcess As Long
Dim found As Boolean
EnumProcesses aProcessess(1), UBound(aProcessess), bytesNeeded
nProcesses = bytesNeeded/4
For i = 1 To nProcesses
hProcess = OpenProcess(PROCESS_ALL_ACCESS, False, aProcessess(i))
If (hProcess) Then
Dim hmodule(1 To 1024) As Long ' no more than 1024 modules per process?'
bytesNeeded = 0
If EnumProcessModules(hProcess, hmodule(1), 1024 * 4, bytesNeeded) Then
Dim nModules As Long
Dim j As Long
Dim moduleName As String
moduleName = Space(1024) ' module name should have less than 1024 bytes'
nModules = bytesNeeded/4
For j = 1 To nModules
Dim fileNameLen As Long
fileNameLen = GetModuleFileNameExA(hProcess, hmodule(j), moduleName, 1024)
moduleName = Left(moduleName, fileNameLen)
If Right(LCase(moduleName), Len(theModuleName)) = LCase(theModuleName) Then
found = True
Exit For
End If
Next
End If
End If
CloseHandle hProcess
If found Then Exit For
Next
IsModuleRunning = found
End Function
Private Sub Form_Load()
MsgBox IsModuleRunning("explorer.exe")
End Sub
est un peu long, mais l'appelant est une petite fonction, vous pouvez Utilisez-le si vous voulez le tester un peu :)
- 1. Surveillance d'un processus dans Windows
- 2. Surveillance des processus Windows
- 3. Surveillance du processus dans GWT
- 4. Surveillance du processus
- 5. MySQL Voir vérifier si les données sont NULL
- 6. Les enfants de Flex Viewstack, si vous ne pouvez pas les voir, existent-ils?
- 7. Les identifiants de mysql sont-ils garantis, même si les lignes sont supprimées?
- 8. Comment créer un moyen de surveillance automatisé pour voir si cette application est en cours
- 9. Dans quel processus les flux de travail Sharepoint 2007 sont-ils exécutés?
- 10. Démarrer le processus de surveillance dans le système
- 11. Pourquoi les programmes sécurisés sont-ils si difficiles à développer (pour moi)?
- 12. Les appels sont-ils synchrones dans WCF?
- 13. Comment puis-je voir les erreurs qui se sont produites dans un flux de travail skelta?
- 14. Les processus engendrés sont abandonnés
- 15. Lettres dans les entiers. Que sont-ils?
- 16. Les avertissements sont-ils importants?
- 17. Comment fermer un processus shell dans VB6
- 18. Les fichiers resx sont-ils nécessaires?
- 19. test pour voir si un XElement existe
- 20. Surveillance d'un sous-processus/puis-je obtenir TotalProcessorTime pour un groupe de processus?
- 21. Comment puis-je voir les valeurs hexadécimales d'une chaîne dans une fenêtre de surveillance VS2008?
- 22. Les processus fils créés avec fork() sont-ils automatiquement supprimés lorsque le parent est tué?
- 23. RichTextBox vs FlowDocumentScrollViewer - Pourquoi sont-ils si différents?
- 24. Les types NULL sont-ils parfaits pour ma situation?
- 25. vs2008 attacher au processus, ne peut pas voir quel processus
- 26. Comment les conteneurs stl sont-ils supprimés?
- 27. Les objets Hashtable sont-ils toujours utiles?
- 28. SET .... où sont-ils stockés
- 29. Les éléments de liste déroulante sur un ToolstripmenuItem et voir si leurs articles sont vérifiés
- 30. Designer pour voir les internes?
C'est une solution bon marché, je l'aime bien. –