1

问题是我根本找不到这个选项。我需要从 iis 运行 winforms 应用程序,但我无法实现。Сan 有人给我一个提示。

我试图为站点池提供本地系统和管理员身份,但它不起作用,只是进程在没有任何窗口的情况下运行。


更新

我确实检查了“允许服务与桌面交互”感谢回答,但仍然没有出现窗口


更新2

我什至尝试了这个答案,第二个答案,但根本无法启动过程

4

1 回答 1

3

从 Windows Vista 开始,“与桌面交互”设置受到限制。交互式服务容易受到所谓的“粉碎”攻击,即高权限进程无法正确验证同一桌面上运行的低权限进程发送给它的窗口消息的参数。这可能导致安全漏洞。作为纵深防御措施,微软将控制台会话从会话 0 更改为会话 1,与以前版本的 Windows 一样。交互式服务仍然在会话 0 上运行,并且可以创建 UI,或运行其他显示 UI 的程序,但用户看不到它们,也无法接收来自其他进程的恶意消息。

为了兼容性,Windows 包括交互式服务检测服务 (Ui0detect)。如果交互式服务创建了一个新窗口,则会生成一个提示,告诉用户它正在尝试显示一条消息并请求他们切换到会话 0 以查看它。

但是,在 Windows 8 上,此服务现在设置为手动启动,如果NoInteractiveServices注册表值设置为 1(默认情况下),它将不会启动(报告错误 1,不正确的功能)。该值低于HKLM\SYSTEM\CurrentControlSet\Control\Windows。(来源

我强烈建议不要这样做。交互式服务必须在具有高度特权的 LocalSystem 安全上下文下运行。您的代码实际上不太可能需要这些权限。相反,将 UI 编写为从用户的 Startup 程序组或各种 Run 注册表项之一启动的低特权进程,并连接到 Web 应用程序,轮询启动您需要启动的进程的信号. 您可以使用 SignalR 来通知启动器该启动应用程序了。

参考:服务和驱动程序的会话 0 隔离

于 2015-07-22T15:43:48.027 回答