Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C# / VB.NET - [VB.NET] Cambiare priorità di un processo - Accesso Negato
Forum - C# / VB.NET - [VB.NET] Cambiare priorità di un processo - Accesso Negato

Avatar
Fabiowd1990 (Normal User)
Rookie


Messaggi: 23
Iscritto: 20/07/2009

Segnala al moderatore
Postato alle 15:18
Lunedì, 19/04/2010
Salve a tutti,
sto provando a creare una piccola applicazione che cambi la priorità di un processo.
Il problema è che, quando provo a cambiare la priorità di un processo "utente", il programma effettua tranquillamente il suo compito, se provo a cambiare priorità di un processo "SYSTEM", il programma mi restituisce un'eccezione: ACCESSO NEGATO.
C'è un modo per risolvere questo inconveniente?
Premetto che l'account che utilizzo è del tipo "amministratore".
Grazie anticipatamente per la risposta.
Ecco il codice.

Codice sorgente - presumibilmente VB.NET

  1. Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
  2.         Dim prc As Process()
  3.         Dim _percorsoprocesso As String = ""
  4.         Dim _fileprocesso As String = ""
  5.  
  6.         OpenFileDialog1.ShowDialog()
  7.         _percorsoprocesso = OpenFileDialog1.FileName
  8.         _fileprocesso = System.IO.Path.GetFileNameWithoutExtension(_percorsoprocesso)
  9.  
  10.         If IO.File.Exists(_percorsoprocesso) Then
  11.             Process.Start(_percorsoprocesso)
  12.             prc = Process.GetProcesses()
  13.         Else
  14.             Exit Sub
  15.         End If
  16.  
  17.         For i = 0 To prc.Count - 1
  18.  
  19.             If prc(i).ToString.Contains(_fileprocesso) Or prc(i).ToString.Contains("ati2evxx") Then
  20.                 prc(i).PriorityClass = ProcessPriorityClass.RealTime
  21.             End If
  22.         Next



PM Quote
Avatar
Il Totem (Admin)
Guru^2


Messaggi: 3635
Iscritto: 24/01/2006

Segnala al moderatore
Postato alle 19:05
Lunedì, 19/04/2010
Dato che il .NET è una piattaforma che gestisce codice managed e safe, credo che tu non possa eseguire quest'azione, in quanto pericolosa per la stabilità del sistema.


"Infelici sono quelli che hanno tanto cervello da vedere la loro stupidità."
(Fligende Blatter)

"Dubitare di se stessi è il primo segno d'intelligenza."
(Ugo Ojetti)
PM Quote
Avatar
Fabiowd1990 (Normal User)
Rookie


Messaggi: 23
Iscritto: 20/07/2009

Segnala al moderatore
Postato alle 19:30
Lunedì, 19/04/2010
Testo quotato

Postato originariamente da Il Totem:

Dato che il .NET è una piattaforma che gestisce codice managed e safe, credo che tu non possa eseguire quest'azione, in quanto pericolosa per la stabilità del sistema.



Grazie per la risposta Totem, ma ho trovato il modo per eseguire lo stesso quest'azione, anche se, come tu hai già detto, non credo sia "sicurissima" da effettuare.
Posto il codice per completezza della risposta.

Codice sorgente - presumibilmente VB.NET

  1. Dim prc As Process()
  2. Dim _fileprocesso As String = ""
  3.  
  4. prc = Process.GetProcesses()
  5.  
  6. For i=0 to prc.count -1
  7. If prc(i).ToString.Contains(_fileprocesso) Then
  8.                     prc(i).EnterDebugMode()
  9.                     prc(i).PriorityClass = ProcessPriorityClass.High
  10. End If
  11. Next



Dopo delle estenuanti ricerche, ho trovato questa modalità(DebugMode)che permette di interagire con processi aperti dal sistema.
Ora mi resta un'altra curiosità: qualcuno sa se è possibile costringere un programma ad utilizzare memoria fisica e non virtuale?

Ultima modifica effettuata da Fabiowd1990 il 19/04/2010 alle 19:32
PM Quote
Avatar
Il Totem (Admin)
Guru^2


Messaggi: 3635
Iscritto: 24/01/2006

Segnala al moderatore
Postato alle 18:29
Martedì, 20/04/2010
In che senso virtuale? Nel senso che vuoi che gli indirizzi siano fisici e non virtuali? Oppure vuoi forzarlo nell'area di swap?


"Infelici sono quelli che hanno tanto cervello da vedere la loro stupidità."
(Fligende Blatter)

"Dubitare di se stessi è il primo segno d'intelligenza."
(Ugo Ojetti)
PM Quote
Avatar
Fabiowd1990 (Normal User)
Rookie


Messaggi: 23
Iscritto: 20/07/2009

Segnala al moderatore
Postato alle 18:52
Martedì, 20/04/2010
Si, voglio forzarlo ad usare la ram e non lo swap, sempre che si possa(scusate se dico profanità) :asd:

PM Quote
Avatar
Il Totem (Admin)
Guru^2


Messaggi: 3635
Iscritto: 24/01/2006

Segnala al moderatore
Postato alle 18:50
Mercoledì, 21/04/2010
Da quanto ne so io, l'area di swap viene usata per contenere dati che non starebbero altrimenti nella memoria di lavoro: quando il processore ripristina il contesto, prima di far passare il processo in running, il gestore della memoria si occupa di caricare i dati nella ram leggendoli dall'area di swap, ed eventualmente ponendo in quest'ultima altri dati reputati non utili nell'immediato. Dato che il meccanismo serve per poter gestire quantità di dati superiori alla dimensione fisica della memoria, credo proprio che non esista un modo per supplire al problema, ovvero per fare in modo che il processo non venga MAI posto in swap (a quanto mi sembra di capire, è quello che vuoi). Posso solo ipotizzare che questo comportamento sia una conseguenza del fatto che il processo abbia priorità alta: in questo modo le policy di gestione dei processi reputeranno i suoi dati più utili e più difficilmente li porranno nella swap.


"Infelici sono quelli che hanno tanto cervello da vedere la loro stupidità."
(Fligende Blatter)

"Dubitare di se stessi è il primo segno d'intelligenza."
(Ugo Ojetti)
PM Quote
Avatar
Fabiowd1990 (Normal User)
Rookie


Messaggi: 23
Iscritto: 20/07/2009

Segnala al moderatore
Postato alle 19:01
Mercoledì, 21/04/2010
Testo quotato

Postato originariamente da Il Totem:

Da quanto ne so io, l'area di swap viene usata per contenere dati che non starebbero altrimenti nella memoria di lavoro: quando il processore ripristina il contesto, prima di far passare il processo in running, il gestore della memoria si occupa di caricare i dati nella ram leggendoli dall'area di swap, ed eventualmente ponendo in quest'ultima altri dati reputati non utili nell'immediato. Dato che il meccanismo serve per poter gestire quantità di dati superiori alla dimensione fisica della memoria, credo proprio che non esista un modo per supplire al problema, ovvero per fare in modo che il processo non venga MAI posto in swap (a quanto mi sembra di capire, è quello che vuoi). Posso solo ipotizzare che questo comportamento sia una conseguenza del fatto che il processo abbia priorità alta: in questo modo le policy di gestione dei processi reputeranno i suoi dati più utili e più difficilmente li porranno nella swap.



Grazie per la risposta, e scusatemi per il piccolo "off-topic"!

PM Quote