2011-10-12 65 views
0

小问题,是否有人能够通过任何本地webdeployment控制iTunes? 最希望通过托管的IIS WCF服务?本地IIS-Com互联网iTunes

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

方面不是,通过Visual Studio 2010调试模式运行相同的服务,一切都很好!

  • UPDATE * 我是想通过我的窗户电话沟通,iTunes和我想过要去一轮与网站/服务......但随着新芒果更新,我们可以在手机上做TCP套接字本地!所以我会尝试这条路线。

回答

0

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

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

如果你不想与iTunes进行交互,并只希望lanch它在用户会话,你需要做的是:

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

嘿Seva,那是一个详细的答案!但我并不是在寻求与iTunes互动。所以我想知道有没有办法将命令传递到本地.net应用程序从asp.net网站,我会管理iTunes com互操作在该本地应用程序?像一个消息总线或任何东西? – Depechie

+0

你将不得不对两件事情做出决定。首先 - 如何在用户会话中启动流程(让我们称之为代理)。其次 - 如何在服务和代理之间进行沟通。完成#1的简单方法是使用任务调度程序创建登录任务。这将执行您每次用户登录时指定的任何进程。这个过程应该建立与你的服务的沟通。对于#2,你有广泛的选择 - 几乎任何类型的进程间通信都可以。 COM,命名管道,TCP,共享内存段,共享文件,WCF等。 –

0

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

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

+0

那么,任何解决这个问题呢?我也尝试完全身份验证,并作为我自己的用户运行...(或者我错过了什么)。还是有一个关于如何完成这个任务的“模型”(不管它是否是iTunes)?换句话说,如何通过本地IIS服务“启动”本地应用程序? – Depechie

相关问题