C# 以编程方式更改Windows Shell

C# 以编程方式更改Windows Shell,c#,windows,shell,registry,C#,Windows,Shell,Registry,我正在从事一个将“嵌入”到Windows7系统的项目,这将通过禁用任务管理器和将Windowsshell更改为应用程序以及其他方式来实现 我想在这里做的是以编程方式在应用程序和explorer.exe之间更改Windows shell,我想知道是否有任何方法可以在C#中实现这一点 目前,我有几行代码试图更改Windows Shell的注册表项,但在刷新注册表编辑器后似乎什么也没有发生,代码如下所示: regKey = Registry.LocalMachine.OpenSubKey("S

我正在从事一个将“嵌入”到Windows7系统的项目,这将通过禁用任务管理器和将Windowsshell更改为应用程序以及其他方式来实现

我想在这里做的是以编程方式在应用程序和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更改完成,但没有效果

如果有人能告诉我是否有可能通过编程实现,以及我的错误在哪里,我将不胜感激

另外,我很想知道是否有办法对程序进行编码,使其始终以管理员权限运行,以便注册表编辑工作正常

非常感谢,


Richard

在网上搜索了很多其他位置后,我终于找到了Shell,可以将其更改为正在构建的应用程序的可执行文件

“嵌入”过程是一个三步过程,对于我正在使用的软件,我们首先禁用任务管理器,然后在本地机器注册表中设置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);
    }
}
在本例中,变量“shell”是一个字符串,包含用作新Windows shell的可执行文件的路径

除此之外,还有一种“取消嵌入”软件的方法,该方法仅从当前用户注册表中删除“DisableTaskMgr”和“Shell”值,还将本地计算机注册表中的“Shell”值重置为“explorer.exe”

我希望这能帮助那些在编程更改Windows shell时遇到困难的人

问候,


Richard

谁会安装一个禁用任务管理器的应用程序?@Ramhound这个问题不是关于禁用任务管理器的-该应用程序不会出售给公众,因为公众不会使用它,这是针对敏感数据、,而且应用程序本身也需要防止被盗/tamper@RichardBenn例如我想你应该问问那件事。通常,为了防止敏感数据/盗窃,我们使用密码和加密。为什么忽略这些标准路径?没有安全专家会建议您通过更改windows外壳来提高安全性。@tenfour为什么您认为密码和加密尚未使用?文件中的数据是加密的,但需要对数据进行更多的保护。替换shell是为了阻止人们使用windows资源管理器制作可执行文件的副本并尝试对其进行反向工程,因此也是禁用Task Manager的原因。因为我无法想象您的解决方案可以在加密的基础上添加什么样的“数据保护”。听起来您基本上想要实现一个没有其他应用程序运行的kiosk模式(不仅仅是TM&Explorer)。否则,用户不就打开一个命令提示符来复制文件吗?或者更可能:通过电子邮件发送给自己?这方面肯定有现成的信息亭解决方案。对不起,我还不太熟悉在这里发布问题和答案。我将答案编辑为仅为答案