Domanda

Ecco l'idea, mi piacerebbe fare un servizio? che cercherà l'avvio di un determinato programma e lo rifiuterà a meno che non siano soddisfatte determinate condizioni.

Diciamo che ho un gioco a cui voglio impedirmi di giocare durante la settimana. Quindi, se lo avvio in qualsiasi giorno diverso da Venerdì / Sabato / Domenica, intercetterà e annullerà. Questo è possibile con C #?

La cosa principale che sto cercando è come avviare un programma, il resto dovrebbe essere facile.

È stato utile?

Soluzione

Bene, puoi sicuramente determinare quali programmi sono in esecuzione cercando i nomi dei processi che desideri (GetProcessesByName ()) e uccidendoli.

Process[] processes = Process.GetProcessesByName(processName);
foreach(Process process in processes)
{
   process.Kill();
}

Potresti semplicemente avere un elenco di quelli che non volevi eseguire, fare il controllo del tempo (o qualunque criterio dovesse essere soddisfatto) e quindi scorrere l'elenco. Ho fatto una cosa del genere una volta per un test e funziona abbastanza bene.

Altri suggerimenti

Non conosco C # in particolare qui, ma uno dei motivi per cui potresti farlo (sarò che sia un modo pericoloso) è usando le Opzioni di esecuzione dei file di immagine ( http://blogs.msdn.com/junfeng/archive/2004/04/28/121871.aspx ) nel registro. Per qualsiasi eseguibile che ti interessa intercettare, puoi impostare l'opzione Debugger per esso e quindi creare una piccola applicazione che verrebbe utilizzata nel debugger e quindi essenzialmente filtrare queste chiamate. Se si desidera consentire l'esecuzione, quindi avviare il processo, altrimenti fare quello che ti piace. Non l'ho mai provato, ma sembra che potrebbe fare quello che vuoi.

Oppure, se si desidera reagire all'avvio del processo e quindi chiuderlo, è possibile utilizzare un ProcessWatcher ( http://weblogs.asp.net/whaggard/archive/2006/02/11/438006.aspx ) e iscriviti all'evento creato dal processo e quindi chiudilo giù se necessario. Tuttavia, si tratta più di un approccio reattivo invece di un approccio proattivo come il primo.

Non sono sicuro di poterlo avviare all'avvio, ma potresti provare a cercare il programma nell'elenco di finestre (era ENUM_WINDOWS? Non riesco mai a ricordare) e spegnerlo non appena si presenta .

Probabilmente potresti anche farlo in AutoIt!

Trascina Petzold e divertiti con Windows ...

MODIFICA: controlla sysinternals come sorgente su come elencare i processi attivi: esegui questo in un ciclo e puoi catturare il tuo programma all'avvio. Non credo che il sito ufficiale abbia ancora la fonte, ma è destinato a essere lì fuori da qualche parte ...

Hrm, piuttosto che intercettare il suo avvio, forse il tuo servizio potrebbe in qualche modo sabotare l'eseguibile (ad esempio muck con i permessi, rinominare il file EXE, sostituire il file EXE con qualcosa che ti rimprovera per la tua debole volontà, ecc.)

Se ciò non è abbastanza buono, puoi provare uno di questi approcci:

http://www.codeproject.com/KB/system/win32processusingwmi.aspx

http://msdn.microsoft.com/en-us/magazine /cc188966.aspx

Ci sono sempre ganci. Sebbene non ci sia supporto nella libreria .net, puoi sempre racchiudere la dll win32. Ecco un bell'articolo: http://msdn.microsoft. com / sv-SE / magazine / cc188966 (it-it) aspx

Questa è una programmazione di basso livello e se vuoi che il tuo codice sia portatile non userei gli hook.

Questa app farà proprio questo Kill Process from Orange Lamp
Non sono l'autore.

Non è necessario intercettare necessariamente i programmi di avvio. Puoi scrivere un " gestore avvio programmi " app che avvia i programmi per te (se sono nella white list). Dopo aver scritto l'app, tutto ciò che dovresti fare è modificare le scorciatoie dell'applicazione per puntare al tuo manager di avvio con i parametri appropriati.

Se devi solo disabilitare l'applicazione, puoi modificare il registro per provare a collegare automaticamente un debugger a quell'applicazione, se il debugger non esiste, Windows si lamenterà e salverà.

[HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows NT \ CurrentVersion \ Image File Execution Options] è la chiave, cerca l'articolo MS http://support.microsoft.com/default.aspx?kbid=238788 per maggiori informazioni.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top