【问题标题】:IIS open file on Active User's DesktopIIS 在活动用户的桌面上打开文件
【发布时间】:2014-06-21 18:34:21
【问题描述】:

情况如下:

我的电脑上有大量视频,它会连接到我的电视上。我想制作一个应用程序来从我的移动设备上打开我电脑上的视频(是的,我知道它存在,我只是为了好玩而开发它)

所以我已经设置了一个网络服务,以及一个使用上述网络服务的应用程序。网络服务收集文件夹/文件列表,并将它们发送到我的设备,也可以获取文件路径并使用默认程序使用System.Diagnostics.Process.Start(path)打开它

当我使用 IISExpress 时,它工作正常,但我想使用 IIS。当我使用 IIS 时,我打开视频文件并听到它在后台播放,但它没有显示在监视器上。 VLC出现在任务管理器中,我杀了它,声音就停了。

我假设问题是运行应用程序池的身份,但是当我尝试更改身份时,它没有任何区别。如果有帮助,我正在运行 Windows 8。是否有人对如何使应用程序池以我的身份运行,或者在活动用户的桌面上打开进程,而不是在应用程序池的名称下打开它有任何想法?

【问题讨论】:

    标签: asp.net web-services iis


    【解决方案1】:

    由于 Windows 会话隔离,这很难实现。 IIS 及其工作进程位于会话 0 中,而您的登录会话通常 > 0。通过本机 Win32 API,会话 0 中的某些内容可以在其他会话中启动可执行文件,但我认为这不值得同时。

    请使用 IIS Express,因为它直接在您的登录会话中运行,根本不需要跨越会话边界。

    【讨论】:

    【解决方案2】:

    关于 Process.Start() 问题,我认为除了更改应用程序池的标识之外,您还需要转到“管理工具”下的“服务”并选中“允许服务与桌面交互”下的框万维网发布服务的登录选项卡。我认为这已经在以下问题中得到解决:System.Diagnostics.Process.Start not work from an IIS

    现在,如果我必须将这样的应用程序放在一起,我会尝试稍微不同的方法:除了您已经拥有的之外,我将构建一个小型桌面应用程序,它会在您登录时自动启动并位于系统托盘中你的桌面。它将在命名管道或 tcp 或类似的东西上侦听来自 asp.net 应用程序的消息,并从正确的用户上下文中启动进程。这似乎是一种更稳定的方法,它还允许您将 Web 服务器与播放视频的桌面分开。

    【讨论】:

    • 不幸的是,这似乎不起作用。我可以在任务管理器中看到“选择一个应用程序”(或者该程序的措辞是选择默认程序),但它没有出现。我喜欢你的另一个想法,但我的目标是保持简单。我只是切换到 Plex :)
    • 您在第 1 段中的建议将不起作用,因为存在会话隔离。第 2 段的建议是可行的,但代码仍然很复杂。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-04-06
    • 2021-06-28
    • 2021-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-04
    相关资源
    最近更新 更多