2011-10-11 10 views
13

Sto lavorando a un progetto che sarà "incorporato" in un sistema Windows 7, ciò avverrà disabilitando il task manager e modificando la shell di Windows nell'applicazione, così come altri cose.Modifica in modo programmatico della shell di Windows

Quello che sto cercando di fare qui è modificare a livello di shell di Windows tra l'applicazione e explorer.exe, vorrei sapere se c'è un modo per fare questo in C#.

Attualmente ho un paio di righe di codice che tentano di modificare la voce del Registro per la shell di Windows, ma nulla sembra accadere dopo l'aggiornamento l'Editor del Registro di sistema, il codice simile a questo:

regKey = Registry.LocalMachine.OpenSubKey("SOFTWARE", true).OpenSubKey("Microsoft", true).OpenSubKey("Windows NT", true).OpenSubKey("CurrentVersion", true).OpenSubKey("Winlogon", true); 
    regKey.DeleteValue("Shell"); 
    regKey.SetValue("Shell", shell); 
    regKey.Close(); 

I' Ho provato a riavviare Windows per vedere se questo permette di completare la modifica della shell, ma senza successo.

Apprezzerei molto se qualcuno potesse dirmi se è persino possibile farlo a livello di codice e dove mi sbaglio.

Inoltre, sarei grato di sapere se c'è un modo per codificare il programma in modo che sia sempre in esecuzione con i privilegi di amministratore in modo che la modifica del Registro di sistema funzioni.

Molte grazie,

Richard

+1

Chi in mente avrebbe installare un'applicazione che disabilita il task manager? –

+1

@Ramhound questa domanda non riguardava la disattivazione del task manager - l'applicazione non sarà venduta al pubblico in generale, perché il pubblico non ne avrebbe alcuna utilità, questo è per un'applicazione specialistica dove i dati sensibili e l'applicazione stessa deve essere protetto dal furto/manomissione –

+0

@RichardBenn: Penso che dovresti chiedermelo allora. Di solito per proteggere dai dati sensibili/furto, usiamo password e crittografia. Perché hai ignorato questi percorsi standard? Nessun esperto di sicurezza potrebbe suggerire di aumentare la sicurezza cambiando la shell di Windows. – tenfour

risposta

12

Dopo molte ricerche di altre posizioni sulla rete, ho finalmente avuto la Shell per modificare il file eseguibile dell'applicazione che si sta costruendo.

Il processo di "Embedding" è un processo in tre fasi, nel caso del software su cui sto lavorando, iniziamo disattivando Task Manager, quindi impostiamo l'eseguibile della shell nel registro di Macchina locale e quindi ripetiamo il processo nel registro utente corrente.

seguito è il codice che realizza questo:

public void embedSoftware() 
{ 
    try 
    { 
     // Disable Task Manager 
     regKey = Registry.CurrentUser.OpenSubKey(subKey, true).CreateSubKey("System"); 
     regKey.SetValue("DisableTaskMgr", 1); 
     regKey.Close(); 
     // Change the Local Machine shell executable 
     regKey = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon", true); 
     regKey.SetValue("Shell", shell, RegistryValueKind.String); 
     regKey.Close(); 
     // Create the Shell executable Registry entry for Current User 
     regKey = Registry.CurrentUser.OpenSubKey(@"Software\Microsoft\Windows NT\CurrentVersion\Winlogon", true); 
     regKey.SetValue("Shell", shell); 
     regKey.Close(); 
     MessageBox.Show("Embedding Complete"); 

    } 
    catch (Exception e) 
    { 
     MessageBox.Show(e.Message); 
    } 
} 

In questo esempio il "guscio" variabile è una stringa contenente il percorso del file eseguibile da utilizzare come nuova shell di Windows.

Inoltre, esiste un metodo per "annullare l'incorporamento" del software, questo metodo elimina semplicemente i valori "DisableTaskMgr" e "Shell" dai registri Utente corrente, inoltre ripristina il valore "Shell" nella Macchina locale Registro di sistema a "explorer.exe".

Spero che questo aiuti gli altri là fuori che hanno difficoltà a cambiare Windows Shells a livello di codice.

saluti,

Richard

+2

Siamo spiacenti, sono ancora abbastanza nuovo per pubblicare domande e risposte qui. Ho modificato la risposta in modo che fosse una risposta –

Problemi correlati