2011-10-11 10 views
13

Estoy trabajando en un proyecto que será "incrustado" en un sistema Windows 7, esto se logrará al deshabilitar el administrador de tareas y cambiar el shell de Windows a la aplicación, así como a otros cosas.Programmatic change the Windows Shell

Lo que estoy buscando hacer aquí es cambiar programáticamente el shell de Windows entre la aplicación y explorer.exe, me gustaría saber si hay alguna manera de hacer esto en C#.

Actualmente tengo unas pocas líneas de código que intentan cambiar la entrada del registro para el shell de Windows, pero nada parece ocurrir después de actualizar el Editor de registro, el código es el siguiente:

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' He intentado reiniciar Windows para ver si eso permite que el cambio de shell se complete, pero fue en vano.

Lo agradecería mucho si alguien me puede decir si es posible hacerlo programáticamente, y dónde me estoy equivocando.

Además, agradecería saber si hay una forma de codificar el programa para que siempre se ejecute con privilegios de administrador para que funcione la edición del registro.

Muchas gracias,

Richard

+1

¿Quién en el sano juicio podría instalar una aplicación que desactiva el administrador de tareas? –

+1

@Ramhound, esta pregunta no se trata de deshabilitar el administrador de tareas: la aplicación no se venderá al público en general, porque el público en general no podría usarla, esto es para una aplicación especializada donde los datos confidenciales y la aplicación misma necesita protección contra robo/manipulación –

+0

@RichardBenn: creo que deberías preguntar sobre eso entonces. Por lo general, para proteger contra datos confidenciales/robo, utilizamos contraseñas y encriptación. ¿Por qué has ignorado estas rutas estándar? Ningún experto en seguridad sugeriría que aumente la seguridad al cambiar el shell de Windows. – tenfour

Respuesta

12

Después de mucha búsqueda de otras poblaciones en la red, por fin he conseguido el Shell para cambiar al archivo ejecutable de la aplicación que se está construyendo.

El proceso de "incrustación" es un proceso de tres pasos, en el caso del software en el que estoy trabajando, comenzamos deshabilitando el Administrador de tareas, luego configuramos el ejecutable de shell en el registro de la máquina local y luego repetimos el proceso en el registro de usuario actual.

a continuación es el código que logra esto:

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); 
    } 
} 

En este ejemplo, la variable "cáscara" es una cadena que contiene la ruta del ejecutable para utilizar como la nueva Shell de Windows.

Además de esto, hay un método para "desentrañar" el software, este método simplemente elimina los valores "DisableTaskMgr" y "Shell" de los registros de usuario actuales, también restablece el valor "Shell" en la máquina local registro a "explorer.exe".

Espero que esto ayude a otros que están teniendo problemas para cambiar Windows Shell programáticamente.

Saludos,

Richard

+2

Lo siento, todavía soy bastante nuevo para publicar preguntas y respuestas aquí. Edité la respuesta para ser solo una respuesta –