Mache das Programm doch als windows Dienst, den Du mit Adminrechten installierst.
Du hast dann zwar keine Benutzeroberfläche, aber er läuft immer und kann nicht abgeschaltet werden, wenn er richtig installiert ist. Außerdem macht er ja sowieso nichts anderes als zu prüfen, ob die momentan laufenden Anwendungen beendet werden sollen, bzw. die gerade startende Anwewndung. Hierfür suche nach WMI
und Process bzw. Processes, damit kannst Du Anwendungen steuern. Ach Ich habe Dir auch ein kleines Beispiel. Das Stellt zwar nur die Prio des Prozesses ein, aber hilft bestimmt um die Funktionsweise zu verstehen. Natürlich kannst Du den Prozess Abschießen, wenn du das etwas modifizierst. Public Enum enumPrio
RealTime = 1
High = 2
AboveNormal = 3
Normal = 4
BelowNormal = 5
Idle = 6
End Enum
'*** Beschreibung: Diese Funktion Stellt die Priorität der übergebenen
' Anwendung auf
'*** den übergebenen Prioritätswert ein.
'*** Hinweis: Der Anwendungsname muss ohne '.exe' eingegeben werden.
'*** Hinweis: Bei der Ausführung über die Entwicklungsumgebung muss
'*** '.vshost' an den Anwendungsnamen angefügt werden um das
'*** Aktuelle Programm an zu sprechen.
Public Sub setPrio(ByVal Anwendungsname As String, ByVal curPrio As _
enumPrio)
Dim Stoppuhr As New cup_co.co_TimerInterface
If System.Diagnostics.Debugger.IsAttached = True Then
Stoppuhr.ZeitStoppenStarten()
End If
Try
Dim processes As Object = Process.GetProcesses _
'System.Collections.IEnumerable = Process.GetProcesses
'Prozesse nach dem Anwendungsnamen durchsuchen.
For i As Integer = 0 To processes.length - 1
If processes(i).ProcessName.ToString = Anwendungsname Then
'Prio neu vergeben.
If Not processes(i).PriorityClass.ToString = _
curPrio.ToString Then
' MsgBox(p.PriorityClass.ToString & " : " & curPrio)
Select Case curPrio
Case enumPrio.RealTime
processes(i).PriorityClass = _
System.Diagnostics.Process.GetCurrentProcess._
PriorityClass.RealTime
Case enumPrio.High
processes(i).PriorityClass = _
System.Diagnostics.Process.GetCurrentProcess._
PriorityClass.High
Case enumPrio.AboveNormal
processes(i).PriorityClass = _
System.Diagnostics.Process.GetCurrentProcess._
PriorityClass.AboveNormal
Case enumPrio.Normal
processes(i).PriorityClass = _
System.Diagnostics.Process.GetCurrentProcess._
PriorityClass.Normal
Case enumPrio.BelowNormal
processes(i).PriorityClass = _
System.Diagnostics.Process.GetCurrentProcess._
PriorityClass.BelowNormal
Case enumPrio.Idle
processes(i).PriorityClass = _
System.Diagnostics.Process.GetCurrentProcess._
PriorityClass.Idle
Case Else
processes(i).PriorityClass = _
System.Diagnostics.Process.GetCurrentProcess._
PriorityClass.Normal
End Select
Exit For
End If
End If
Next
processes = Nothing
Catch ex As Exception
If Not IsNothing(cup_System.cls_System_Global.PersonalID) Then
Me.Co_SystemComponent1.ErrorMail("co_Windows", _
cup_System.cls_System_Global.PersonalID.ToString & " WinUser" & _
": " & GetWindowsUser(), New StackFrame().GetMethod().Name, _
ex, "", True, True, False, False)
Else
Me.Co_SystemComponent1.ErrorMail("co_Windows", "WinUser : " & _
GetWindowsUser(), New StackFrame().GetMethod().Name, ex, "", _
True, True, False, False)
End If
End Try
If System.Diagnostics.Debugger.IsAttached = True Then
Stoppuhr.ZeitStoppenBeenden("co_Windows Funktion:" & New _
StackFrame().GetMethod().Name, True)
End If
End Sub |