Bloquer les processus

NanakiFire Messages postés 2 Date d'inscription samedi 8 mai 2004 Statut Membre Dernière intervention 2 avril 2008 - 31 mars 2008 à 10:16
NanakiFire Messages postés 2 Date d'inscription samedi 8 mai 2004 Statut Membre Dernière intervention 2 avril 2008 - 2 avril 2008 à 11:41
Bonjour,

Dans le but de mettre un PDA en mode kiosk, j'ai le besoin de bloquer tous les processus ou programmes non désirés, sauf ceux dont le PDA a besoin et ceux que je désire.
Je ne sais pas trop comment m'y prendre, pour le moment j'arrive à récupérer la liste des processus en cours, donc de les comparer à une liste préalablement remplie et de kill les processus qui ne sont pas dans cette liste.

Il faudrai que cette vérification soit faite constamment pour empêcher l'exécution de tout autres programmes. Ou peut-être je m'y prend mâl et je suis ouïe à toutes autres propositions.

Merci d'avance

3 réponses

cs_Stephane33 Messages postés 630 Date d'inscription samedi 15 février 2003 Statut Modérateur Dernière intervention 9 octobre 2011 1
1 avril 2008 à 22:30
je t'invite à utiliser  les librairies OpenNetCf ( ToolHelp)ce qui te permettra de gérer tes processus.(ProcessEntry)
A toi te prévoir une boucle avec un timer.

Le savoir n'est que le filtre de l'experience
0
cs_Stephane33 Messages postés 630 Date d'inscription samedi 15 février 2003 Statut Modérateur Dernière intervention 9 octobre 2011 1
1 avril 2008 à 22:57
tu ajoutes la librairie OpenNetCf.dll cela pourrait donner :





Public Class ProcessInfo
Public hProcess As IntPtr
Public hThread As IntPtr
Public ProcessId As Int32
Public ThreadId As Int32
End Class'ProcessInfo

Public Shared Function KillApp(ByVal Name As String) As Integer
KillApp = 0
Try
Dim Entree As ToolHelp.ProcessEntry()
Dim pe As OpenNETCF.ToolHelp.ProcessEntry
Entree = ToolHelp.ProcessEntry.GetProcesses()
ForEach pe In Entree
If pe.ExeFile.ToString.ToUpper = Name.ToUpper Then
SoundSystem.Beep(1)'Marqueur sonore pas obligatoire
pe.Kill()
KillApp = 1
Exit Function
End If
'Le Process n'existe Pas
KillApp = 2
Next
Catch ex As Exception
KillApp = 3
End Try
End Function

tu appelles cette fonction à l'initialisation de ton mode kiosk qui lui serait en plein écran

If KillApp("fexplorer.exe") = 1 then ...... 'vous serez pendu haut et court
1 = Application trouvée et fermée
2 = Application non trouvée
3 = cette fonction a générée une erreur..
Si tu laisses l'accès à l'interface Windows Mobile inclu cette fonction dans une boucle temps, ou alors mieux
tu réalises un exe pour tuer ta liste de processus, et tu l'ajoutes via le principe d'une notification (temps, allumage du PDA etc....)
 



Attention au accès transverse si tu n'as pas de boucle temps exemple


Dans Internet Explorer (version PDA =PIE) le protocole File:// est reconnu comme tel et si tu le tapes dans la barre d'adresse, tu auras accès au PDA >>> Soluce supprimer ce protocole (base de registre) (Dito dans une note si tu tape file:// et retour à la ligne, celui-ci se transforme en lien et te permet l'accès au PDA)

Le savoir n'est que le filtre de l'experience
0
NanakiFire Messages postés 2 Date d'inscription samedi 8 mai 2004 Statut Membre Dernière intervention 2 avril 2008
2 avril 2008 à 11:41
Déjà, un grand merci pour ton aide. Et aussi j'ai oublié de précisé, je suis en C# .

J'ai donc actuellement un thread qui vérifi toutes les secondes si le nombre de processus lancés change, si c'est le cas il fait une vérification de ces process et kill ceux qui ne sont pas désirés.
Jusque là, ca fonctionne.

Mon nouveau problème survient dans le fait que mon mode kiosk peut lancer des nouveaux processus (autorisés). Pour éviter des plantages, je met mon processus en WaitForExit(), donc une fois un nouveaux processus lancé, la vérification ne se fait plus...
Comment continuer cette vérification ? Ou peut être mes processus sont mal gérés...

Bout de code pouvant aider:
//Boutton permettant de lancer un nouveau processus
private void ButtonPDA_Click(object sender, EventArgs e)
{
    Process p = Process.Start(new ProcessStartInfo(@"\PDA\PDA.exe", ""));
    p.WaitForExit();
}

//Démarrage du kiosk
public void demarrage()
{      
    // Déclaration du thread
    Thread threadVerifProcess = new Thread(new ThreadStart(BoucleThreadVerifProcess));
    // Lancement du thread
    threadVerifProcess.Start();
}

public void BoucleThreadVerifProcess()
{
    while(1 < 2)
    {
        ProcessCustom[] ProcessListe = ProcessCustom.GetProcesses();
        if (NombreDeProcessus != ProcessListe.Length)
        {
             //Vérifi la liste des processus actifs et kill ceux qui ne sont pas souhaités
            CheckProcess(ProcessListe);
        }
        // Attente de 1000 ms
        Thread.Sleep(1000);
    }
}
0
Rejoignez-nous