私はさまざまなレベルの成功を収めたASP.NETを使ってiTunesを制御しようとしてきましたが、私の状況に厳密には適合しません。私はウェブの周りを見て、多くの運がなく、すべてのソリューションを試してみました。私は多くの異なるiTunesのCOMライブラリ(アップルの開発者のウェブサイトにあるものも)を使用しようとしましたが、まだ運がありません。問題は、Visual Studioの開発サーバーを使用してiTunes COMオブジェクト(iTunesApp)のインスタンスを作成するときに、完全に動作し、iTunesを制御できることです。これは、ConsoleとWinFormsアプリケーションでも完全に機能します。しかし、私はそれをIISサーバーを使用するように切り替えると、何も動作していないようです。私はそれが他のデバイスからの要求を受け取ることができるようにASP.NETの下でウェブサイトとして実行する必要があります。これは、iTunes上でWebベースのAPIを制御し、本質的に構築するためのWebアプリケーションを構築する大きな可能性を秘めています。それはiTunesAppクラスの新しいインスタンスの作成時に次のエラーがスローされます。IISで実行されているASP.NETでiTunesを制御する
Retrieving the COM class factory for component with CLSID {DC0C2640-1415-4644-875C-6F4D769839BA} failed due to the following error: 80080005 Server execution failed (Exception from HRESULT: 0x80080005 (CO_E_SERVER_EXEC_FAILURE)).
まず私は、Web周りのプロジェクトの多くで使用されているiTunes.Interop.dll
ファイルを使用していました。私は幸運にも何度も試してみましたが、DLLの登録を試みましたが、DLLへのエントリポイントが見つからないというエラーが出ました。そこで、私は、WindowsコンポーネントサービスでアクセスしてDCOMサービスを実行するためにWebアプリケーションが実行されていることをアプリケーションプールIDに許可する必要があることを発見しました。私はそれをし、誰もまだ何もアクセスできない。次に、iTunesでインストールされたCOMライブラリを使用しようとしました(DLLファイルを参照するのではなく、「参照の追加」に移動したときに、COMタブとiTunesタイプライブラリを選択しました)。私はWindows DCOMコンポーネントに許可を与えたとき、Windowsがインストールされていることを認識してからインストールされたiTunes COMライブラリに許可を与えたと思う。(元のiTunes.Interop.dllを登録できなかった。そこ)。
インストールされたiTunesタイプライブラリとiTunes.Interop.dll
ファイルの両方で、前述の同じエラーが発生しました。不思議なことに、エラー(DC0C2640-1415-4644-875C-6F4D769839BA)
のCLSIDは、コンポーネントサービス\ DCOM \ iTunes \プロパティウィンドウ(F98206B5-F052-4965-9FA0-85F61BC3C19D
)で呼び出されるため、iTunesの「アプリケーションID」と一致しません。私の疑惑は、私はWindowsで正しいDCOMコンポーネントに許可を与えていないということです。エラーのCLSIDのレジストリを検索して結果が返されないので、DCOMコンポーネントのアプリケーションIDではないことがわかりました(すべてのアプリケーションIDはComputer\HKEY_CLASSES_ROOT\Wow6432Node\AppID
です - そこにも見つかりませんでした)。しかし、それはエラーのCLSIDなので、どこかで参照する必要があり、どこでも見つけることができませんでした。 GoogleでどちらのIDを検索しても、どちらもiTunesを含む検索結果が返されるため問題はないと判断されます。
私はさらにマルチスレッドのアプローチを試みました。 COMライブラリはSTAモデルで動作し、WebサーバーはMTAで動作するため、私が見つけた解決策の1つは、サーバーのスレッド実行モデルをSTAに変換してCOMライブラリを呼び出すことを提案しました。これはどちらもうまくいかなかった。私は完全に独立して実行している2台のコンピュータでこの問題を重複しており、両方のコンピュータでVisual Studio開発サーバー(およびコンソールとWinFormsアプリケーション)は実行できますが、IISは実行できません。エラーがラインで投げるある
using System;
using System.Collections.Generic;
using System.Linq;
using System.Security.Principal;
using System.Threading;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using iTunesLib;
namespace NewASPXNetduino2
{
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
Response.Write(WindowsIdentity.GetCurrent().Name + "\n");
var iTunes = new iTunesApp();
iTunes.Play();
}
}
}
:
は、ここで私は(マルチスレッドなし)を使用しているコードだvar iTunes = new iTunesApp();
マルチスレッドコードが役立つだろうならば、私もそれを投稿することができます。私はこの時点でかなり指向性がなく、どんな援助も感謝しています。ありがとう。
P.S.私はすでにインターネットを巡回し、複数のコンピュータで上記の複数のソリューションを複数回試したので、返信時にそのことを覚えておいてください。ありがとう。
ええ、私はそれが最初に問題だったと思ったが、役に立たなかった。私は、通常のアカウント(管理者アクセス権を持っている)、LocalSystem、Administrator、およびLocalServiceを含む多くの異なるアカウントの下でアプリケーションプールを実行しようとしました。これらのどれも動作していないようです。私はCOMコンポーネントをどのアカウントでも実行できるように設定していますが、上記の特定のアカウントの下で実行するように設定しようとしました。 IIS上のあらゆる状況で動作させることができる場合は、どのように行ったのか、どのような設定だったのかを書き戻してください。ありがとう – Anshul
私はまた、サービスに入り、IISワーカープロセス(w3wp.exe)とIIS自体を自分の管理者アカウントで実行するように設定しようとしましたが、運がまだありません。 – Anshul