我想用视频文件运行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 Admin Service,并允许服务与桌面交互。仍然无法看到视频。
答案 0 :(得分:1)
正如评论部分中'Lex Li'所示,如果在会话0中运行的进程(本地IIS中的应用程序)请求UI,则UI不会显示在用户会话中。从用户的角度来看,应用程序似乎是挂起的,实际上它正在正常运行,并耐心地等待用户无法看到的用户响应!
在Windows Vista及更高版本中,会为服务和用户模式驱动程序创建会话0。会话1是为第一个登录的用户创建的。该用户的应用程序在会话1中运行。
考虑以下示例 - 如果属于应用程序的服务在会话0中生成UI元素 - 例如,等待用户单击“确定”或“取消”的对话框,则应用程序现在正在等待服务,UI并未显示在用户会话中。从用户的角度来看,应用程序似乎是挂起的,实际上它正在正常运行,并耐心地等待用户无法看到的用户响应!
您可以想象 - 这给用户,管理员和开发人员带来了问题。但是,有一些快速减轻因素需要考虑。
如果应用程序的服务使用UI,则内置缓解(在Windows Vista及更高版本中)允许用户在特殊桌面中与Session 0 UI进行交互。这将使特定于应用程序的UI可用,而不是整个Session 0桌面。
如果应用程序创建全局命名对象,则使用Windows XP兼容模式确保应用程序将继续使用Session 0服务。
在测试应用程序与Windows Vista及更高版本的兼容性时,请考虑以下测试方案:
在终端服务器模式或快速用户切换(FUS)模式下在Windows XP上测试并验证应用程序。如果应用程序在这些情况下在Windows XP上正常运行,则很可能在Windows Vista下运行。
在应用Window XP兼容模式后验证应用程序是否正常运行,该模式包含一些Session 0问题的缓解。
测试驱动程序(在Windows Vista及更高版本中)以确保其正常运行。如果无法做到这一点,请在启用了FUS的Windows XP中测试驱动程序并登录多个用户。如果驱动程序对第二个和后续登录用户正常工作,则不太可能受Session 0更改的影响(在Windows Vista及更高版本中)。此测试未检测到的唯一问题是与会话0中缺少视频驱动程序有关的问题(在Windows Vista及更高版本中)。
最后,您可以利用以下Windows Vista及以上功能解决方案:
使用客户端或服务器机制(如远程过程调用(RPC)或命名管道)在服务和应用程序之间进行通信。
使用WTSSendMessage
功能在用户桌面上创建一个简单的消息框。这允许服务向用户发出通知并请求简单的响应。
对于更复杂的用户界面,请使用CreateProcessAsUser
功能在用户会话中创建进程。
为服务提供的任何命名对象(例如事件或映射内存)明确选择Local\
或Global\
命名空间。
这样做可以快速了解Session 0隔离如何影响Windows Vista及更高版本中的应用程序兼容性。
注意:从Application Compatibility – Session 0 Isolation复制;查看此链接以获取更多信息。