2011-10-11 128 views
13

我正在研究将“嵌入”到Windows 7系统的项目,这将通过禁用任务管理器并将Windows shell更改为应用程序以及其他的东西。以编程方式更改Windows Shell

我在这里要做的是以编程方式更改应用程序和explorer.exe之间的Windows shell,我想知道是否有任何方式在C#中执行此操作。

目前我有几行代码试图更改Windows Shell中的注册表项,但没有出现刷新注册表编辑器后发生的,代码如下:

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

我已经尝试重新启动Windows,看看是否允许shell更改完成,但无济于事。

我非常感谢,如果有人能告诉我是否可以通过编程的方式做到这一点,以及我在哪里出错。

此外,我很高兴知道是否有一种方法来编写程序,以便它始终以管理员权限运行,以便注册表编辑工作。

非常感谢,

理查德

+1

谁在正确的思维将安装禁用任务管理器的应用程序? –

+1

@Rhhound这个问题不是关于禁用任务管理器的 - 应用程序不会销售给公众,因为普通公众将无法使用它,这是针对敏感数据和应用程序本身的专业应用程序需要防止被盗/篡改 –

+0

@RichardBenn:我认为你应该询问一下。通常为了防止敏感数据/盗窃,我们使用密码和加密。你为什么忽略这些标准路径?没有安全专家会建议您通过更改Windows Shell来提高安全性。 – tenfour

回答

12

在网络上其他地方的一番搜索后,我终于得到了命令行管理程序更改为正在建设中的应用程序的可执行文件。

“嵌入”过程是一个三步过程,在我正在使用的软件的情况下,我们先禁用任务管理器,然后在本地计算机注册表中设置shell可执行文件,然后重复该过程在当前用户注册表中。

下面是实现这一点的代码:

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

在此示例中,变量“壳”是包含可执行文件的路径作为新的Windows外壳使用的字符串。

除此之外,还有一种“解嵌”软件的方法,该方法简单地从当前用户注册表中删除“DisableTaskMgr”和“Shell”值,它还重置本地机器中的“Shell”值注册表到“explorer.exe”。

我希望这可以帮助那些无法以编程方式更改Windows Shell的人。

问候,

理查德

+2

对不起,我在这里发布问题和答案还很新。我编辑答案只是答案 –