C# 当应用程序以shell方式运行时,如何在桌面模式下启动windows 7资源管理器?

C# 当应用程序以shell方式运行时,如何在桌面模式下启动windows 7资源管理器?,c#,.net,desktop,explorer,C#,.net,Desktop,Explorer,我写了一个停车场的申请,必须是“傻瓜式的”。。。 我正在做的一件事是以shell而不是资源管理器的形式启动应用程序。(HKLM\Software\Microsoft\Windows NT\CurrentVersion\Winlogon\Shell已设置为我的应用程序) 在这个应用程序中,我实现了一个小的服务对话框,它对用户有很好的保护,允许我启动例如explorer。 我现在需要的是一种将资源管理器作为桌面启动的方法 有没有办法做到这一点呢?据报道,这是不可能的 如果不在注册表项中将资源管理器指

我写了一个停车场的申请,必须是“傻瓜式的”。。。 我正在做的一件事是以shell而不是资源管理器的形式启动应用程序。(HKLM\Software\Microsoft\Windows NT\CurrentVersion\Winlogon\Shell已设置为我的应用程序)

在这个应用程序中,我实现了一个小的服务对话框,它对用户有很好的保护,允许我启动例如explorer。 我现在需要的是一种将资源管理器作为桌面启动的方法

有没有办法做到这一点呢?

据报道,这是不可能的

如果不在注册表项中将资源管理器指定为shell,则无法将其设置为shell

在注册表中将explorer保留为shell,但将杀死explorer.exe并启动shell作为您的一个选项

我看不出有其他干净的方法

一个用户发布了一个可能的解决方案

将HKEY\U LOCAL\U MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Winlogon\Shell更改为“explorer.exe”

运行“userinit.exe”

将HKEY\U LOCAL\U MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Winlogon\Shell更改回自定义Shell

我过去也曾做过类似的事情,一台移动设备在信息亭模式下运行。为了现场调试,我做了以下工作:

  • 在应用程序启动时,检查配置设置,如
    debug=true
    。如果是,请改为启动explorer.exe
  • 连接到设备,设置此设置,如果要调试,请重新启动

没有什么是“傻瓜式的”。你是在问如何从你的程序中运行
explorer.exe
?我的应用程序非常简单,我需要桌面只是为了维护(SQL Server MagManagement Studio)。启动explorer.exe没有问题,但它是在文件管理器模式下,而不是在桌面模式下,这是我的问题。杀死一个进程应该是一个人最不应该做的事情,但作为日常工作?我不喜欢:)但另一个解决方案似乎很好,我稍后会试试。问题是我一年可能需要2次外壳,所以桌面是个例外。至少每天杀掉浏览器似乎有点太冒险了。我过去也遇到过类似的“问题”,我需要在kiosk模式下的移动设备上安装桌面。我将把这个解决方案添加到我的答案中。我决定现在就尝试一下,甚至认为我应该已经在客户站点:)因为这只会破坏我的维护代码,而不会破坏应用程序,所以彻底的测试并不是那么重要。我该怎么说?5分钟的开发时间5分钟的测试,3分钟的在客户pc上安装更新。它只是工作,简单明了:)感谢Stijn!
My Code (autoit)
RegWrite('HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Winlogon','Shell',"REG_SZ",'Explorer.exe')
Run('userinit.exe')
ProcessWait('explorer.exe')
RegWrite('HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Winlogon','Shell',"REG_SZ",@ScriptFullPath)