本地IIS - Com互操作iTunes

时间:2011-10-12 06:55:18

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

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

我尝试使用IIS7.5安装Windos 7,当我在包含WCF服务的IIS apppool上将Process Model - Identity设置为'Local System'时,我看到iTunes.exe在任务管理器中弹出。 但iTunes并没有“活着” - 没有可视外壳,即使iTunesApp对象在我的WCF服务代码中初始化,也不会对其进行任何操作。

没有,通过Visual Studio 2010调试模式运行相同的服务,一切都很好!

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

2 个答案:

答案 0 :(得分:0)

在Visual Studio 2010中进行调试时,这是因为您在登录时运行VS,并且您的登录信息具有iTunes可以与之交互的可见桌面。

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

答案 1 :(得分:0)

服务未显示任何UI窗口的原因是Session Isolation。您的服务(IIS应用程序池进程)在会话0中运行。您的桌面附加到会话1(如果在此计算机上登录了多个用户,则附加到其他一些号码)。

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

如果您不想与iTunes互动,并且只想在用户会话中使用它,那么您需要做的是:

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