【问题标题】:Local IIS - Com interop iTunes本地 IIS - Com 互操作 iTunes
【发布时间】:2011-10-12 06:55:18
【问题描述】:

小问题,是否有人能够通过任何本地网络部署来控制 iTunes? 最好通过托管的 IIS WCF 服务?

我已经在我的 Windows 7 上尝试了 IIS7.5,当我在包含 WCF 服务的 IIS 应用程序池上将进程模型 - 身份设置为“本地系统”时,我看到 iTunes.exe 在任务管理器中弹出. 但是 iTunes 并没有“活着”——没有可视外壳,即使 iTunesApp 对象在我的 WCF 服务代码中初始化,对它执行任何操作也不起作用。

另外,通过 Visual Studio 2010 调试模式运行相同的服务,一切正常!

  • 更新 * 我试图通过我的 Windows 手机与 iTunes 通信,我想通过一个网站/服务来解决这个问题……但是通过新的 Mango 更新,我们可以在手机上使用原生 TCP 套接字!所以我会尝试这条路线。

【问题讨论】:

    标签: asp.net wcf com itunes com-interop


    【解决方案1】:

    服务没有显示任何 UI 窗口的原因是 Session Isolation。您的服务(IIS 应用程序池进程)在会话 0 中运行。您的桌面连接到会话 1(如果有多个用户登录此计算机,则连接到其他数字)。

    有几种解决方法可以让服务向用户显示 UI:
    1.您可以使用“允许服务与桌面交互”选项标记服务。这仅适用于作为本地系统运行的服务。此选项已弃用,仅应用于与旧服务兼容。
    2.服务可以在用户会话中启动一个中间进程并与之通信。

    如果您不想与 iTunes 交互,而只想在用户会话中启动它,您需要做的是:

    • 获取用户正在运行的 windows 站的名称。您可以为此使用windows terminal services API。您必须有创意才能确定当前处于活动状态的用户会话(如果有多个会话)。您可能还想查询用户安全令牌,以便该进程作为用户运行,而不是作为本地系统运行。
    • 调用 CreateProcessAsUser 并传递 STARTUPINFO 结构。将 STARTUPINFO 中的 lpDesktop 字段设置为指向您识别的窗口站。

    【讨论】:

    • 嘿Seva,这是一个详细的答案!但我实际上并不是在寻求与 iTunes 互动。所以我想知道有没有办法从 asp.net 站点将命令传递给本地 .net 应用程序,我将在该本地应用程序中管理 iTunes com 互操作?像消息总线之类的东西?
    • 您必须在两件事上做出决定。首先——如何在用户会话中启动进程(我们称之为代理)。第二——如何在服务和代理之间进行通信。完成 #1 的一种简单方法是使用任务调度程序创建登录任务。这将在每次用户登录时执行您指定的任何进程。此过程应建立与您的服务的通信。对于#2,您有多种选择——几乎任何类型的进程间通信都可以。 COM、命名管道、TCP、共享内存段、共享文件、WCF等
    【解决方案2】:

    这在 Visual Studio 2010 中调试时起作用的原因是因为您在登录下运行 VS,并且您的登录有一个 iTunes 可以与之交互的可见桌面。

    如果您从在服务帐户下运行的进程启动,那么是的,您会在任务管理器中看到可执行文件,但 iTunes 没有可见的桌面可供交互。

    【讨论】:

    • 那么有什么办法解决这个问题吗?我还尝试了完全身份验证并以我自己的用户身份运行......(或者我错过了什么)。或者是否有关于如何完成这项工作的“模型”(无论它是否是 iTunes)?换句话说,如何通过本地 IIS 服务“启动”本地应用程序?
    猜你喜欢
    • 2010-11-14
    • 2011-02-07
    • 2010-12-14
    • 1970-01-01
    • 2011-04-13
    • 2011-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多