Oppure

Loading
19/04/10 13:18
Fabiowd1990
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.

  Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        Dim prc As Process()
        Dim _percorsoprocesso As String = ""
        Dim _fileprocesso As String = ""

        OpenFileDialog1.ShowDialog()
        _percorsoprocesso = OpenFileDialog1.FileName
        _fileprocesso = System.IO.Path.GetFileNameWithoutExtension(_percorsoprocesso)

        If IO.File.Exists(_percorsoprocesso) Then
            Process.Start(_percorsoprocesso)
            prc = Process.GetProcesses()
        Else
            Exit Sub
        End If

        For i = 0 To prc.Count - 1

            If prc(i).ToString.Contains(_fileprocesso) Or prc(i).ToString.Contains("ati2evxx") Then
                prc(i).PriorityClass = ProcessPriorityClass.RealTime
            End If
        Next

aaa
19/04/10 17:05
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.
aaa
19/04/10 17:30
Fabiowd1990
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.

Dim prc As Process()
Dim _fileprocesso As String = ""

prc = Process.GetProcesses()

For i=0 to prc.count -1
If prc(i).ToString.Contains(_fileprocesso) Then
                    prc(i).EnterDebugMode()
                    prc(i).PriorityClass = ProcessPriorityClass.High
End If
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 19/04/10 17:32
aaa
20/04/10 16:29
Il Totem
In che senso virtuale? Nel senso che vuoi che gli indirizzi siano fisici e non virtuali? Oppure vuoi forzarlo nell'area di swap?
aaa
20/04/10 16:52
Fabiowd1990
Si, voglio forzarlo ad usare la ram e non lo swap, sempre che si possa(scusate se dico profanità;) :asd:
aaa
21/04/10 16:50
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.
aaa
21/04/10 17:01
Fabiowd1990
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"!
aaa