我正在开发一个将“embedded”到Windows 7系统中的项目,这将通过禁用任务pipe理器并将Windows Shell更改为应用程序以及其他方式来实现。
我在这里要做的是以编程方式更改应用程序和explorer.exe之间的Windowsshell,我想知道是否有任何方式在C#中执行此操作。
目前我有几行代码尝试更改Windows Shell的registry项,但在刷新registry编辑器后似乎没有任何事情发生,代码如下所示:
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更改完成,但无济于事。
发现为什么在我的C ++应用程序中创build线程的最好方法是什么?
Windows服务状态存储的推荐位置?
cmake中gcc的-mwindows选项相当于什么?
Segfault进程ID和核心转储进程ID是不同的。 为什么?
系统启动时如何自动运行应用程序?
如果有人能告诉我是否可以通过编程的方式来完成这个任务,那么我将不胜感激。
此外,我很高兴知道是否有一种方法来编写程序,以便它始终以pipe理员权限运行,以便registry编辑工作。
非常感谢,
理查德
分叉失败:无法分配内存
在8秒内检测16 GB笔式驱动器上的内容更改
为什么Linux上的string文字的内存地址与其他string的内存地址不同?
高分辨率定时器vs低分辨率定时器
垂直滚动gridview XAML windows store应用程序
网络上的其他位置的搜索后,我终于得到了壳牌更改为正在建立的应用程序的可执行文件。
“嵌入”过程是一个三步过程,在我正在使用的软件的情况下,我们首先禁用任务管理器,然后在本地计算机注册表中设置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(@"SOFTWAREMicrosoftwindows NTCurrentVersionWinlogon",true); regKey.SetValue("Shell",shell,RegistryValueKind.String); regKey.Close(); // Create the Shell executable Registry entry for Current User regKey = Registry.CurrentUser.OpenSubKey(@"SoftwareMicrosoftwindows NTCurrentVersionWinlogon",shell); regKey.Close(); MessageBox.Show("Embedding Complete"); } catch (Exception e) { MessageBox.Show(e.Message); } }
在这个例子中,变量“shell”是一个字符串,其中包含可用作新Windows Shell的可执行文件的路径。
除此之外,还有一种“解嵌”软件的方法,这种方法简单地从当前用户注册表中删除“disableTaskMgr”和“Shell”值,它也将本地机注册表中的“Shell”值重置为“explorer 。可执行程序”。
我希望这可以帮助那些无法以编程方式更改Windows Shell的人。
问候,
理查德
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。