IIS工作进程能够启动进程,但它是不可见的

本文关键字:进程 工作 启动 IIS | 更新日期: 2023-09-27 18:03:17

我想运行一个带有视频文件的VLC。

我在VS中编写了以下代码,并在IIS Express下运行。在IIS Express下一切都很好,我可以看到视频和音频。

但是当我将它发布到本地IIS时,我能够在任务管理器中看到VLC.exe,并且能够听到音频,但无法看到VLC播放器。

代码段

        public bool LaunchVlC(string choice)
        {
          System.Diagnostics.Process VLC = new System.Diagnostics.Process();
          VLC.StartInfo.FileName = @"F:'VLC'vlc.exe";
          VLC.StartInfo.Arguments = "-vvv " + choice;
          VLC.Start();
          return true;
        }

我已经在本地系统帐户下运行IIS管理服务,并允许服务与桌面交互。仍然无法看到视频

IIS工作进程能够启动进程,但它是不可见的

正如Lex Li在评论部分已经指出的那样,如果在会话0中运行的进程(您在本地IIS中的应用程序)请求UI,则UI不会显示在用户会话中。从用户的角度来看,应用程序似乎挂起了,而实际上它执行得很正常,耐心地等待用户看不到的用户响应!

在Windows Vista及以上版本中,会话0是为服务和用户模式驱动程序创建的。为第一个登录的用户创建会话1。此用户的应用程序在会话1中运行。

考虑下面的例子——如果一个属于应用程序的服务在会话0中生成了一个UI元素——例如一个等待用户点击"确定"或"取消"的对话框,应用程序现在正在等待服务,UI没有显示在用户会话中。从用户的角度来看,应用程序似乎挂起了,而实际上它执行得很正常,耐心地等待用户看不到的用户响应!

可以想象,这给用户、管理员和开发人员带来了一个问题。然而,有一些快速缓解因素需要考虑。

  1. 如果应用程序的服务使用UI,则内置缓解(在Windows Vista及以上版本中)允许用户在特殊桌面中与会话0 UI交互。这将使特定于应用程序的UI可用,而不是整个会话0桌面。

  2. 如果应用程序创建全局命名的对象,那么使用Windows XP兼容模式来确保应用程序将继续与会话0服务一起工作。

在测试应用程序与Windows Vista及以上版本的兼容性时,请考虑以下测试场景:

  1. 在Windows XP终端服务器模式或快速用户切换(FUS)模式下测试和验证应用程序。如果应用程序在这些情况下在Windows XP上正常工作,那么它很可能在Windows Vista下工作。

  2. 验证应用程序在应用windows XP兼容模式后是否正常运行,该模式包含对某些会话0问题的缓解。

  3. 测试驱动程序(在Windows Vista及以上版本)以确保其正常运行。如果这是不可能的,在启用FUS和多个用户登录的Windows XP中测试驱动程序。如果驱动程序对第二个和随后登录的用户正确工作,它不太可能受到会话0更改的影响(在Windows Vista及以上版本中)。这个测试没有检测到的唯一问题是那些与会话0中缺少视频驱动程序相关的问题(在Windows Vista及以上版本中)。

最后,您可以利用以下Windows Vista及以上版本的功能解决方案:

  1. 使用客户端或服务器机制,如远程过程调用(RPC)或命名管道在服务和应用程序之间进行通信。

  2. 使用WTSSendMessage函数在用户桌面上创建一个简单的消息框。这允许服务给用户一个通知并请求一个简单的响应。

  3. 对于更复杂的UI,可以使用CreateProcessAsUser函数在用户会话中创建进程

  4. 对于服务可用的命名对象,如事件或映射内存,显式选择Local'Global'命名空间

这样就可以快速了解会话0隔离如何影响Windows Vista及以上版本的应用程序兼容性。


注意:从应用程序兼容性-会话0隔离复制;点击此链接获取更多信息