IIS7.5のワーカープロセスにあるアプリケーションプールの状態を確認するには?

解決


どらちん  2010-12-11 18:51:11  No: 72136  IP: [192.*.*.*]

いつもお世話になっております。
Windows Server 2008 R2 上で、Visual Studio 2010 Professionalを使って
Win32APIを利用して開発しております。

今、Microsoft Live Smooth Streaming Serviceのサービスの生存確認をする
プログラムを作ろうとしています。
ストリーミングサーバから動画を拾ってくる処理がワーカープロセスにあるこ
とがわかり、それらのステータスを確認できれば、欲しい情報が撮れそうなの
ですが・・・その方法が見つからず困っております。

IAppHostAdminManager::GetAdminSection メソッドで取得できそうな気がする
のですが、

GetAdminSection(L"system.webServer/workerprocess",  L"MACHINE/WEBROOT/APPHOST", &pParentElem);

といったように記載しているのですが・・・どうやら第1・第2引数が間違って
いるようで・・・(要素が見つかりませんとエラーを返します)
第一引数を「system.webServer/asp」とすると問題なくS_OKを返すので、この
メソッドを実行するまでの手順については間違っていないようなのですが・・・

この辺りの情報が詳しく掲載されているサイトなどでもけっこうなのですが、
Smooth Streamingのサービスのステータスなどを確認する方法をご存じの方
などいらっしゃいましたら、ご教授いただけないでしょうか?

調査をすると、ほとんどが.NETの「Microsoft.Web.Administration Namespace」
を使っているようで・・・できれば.NETを使わずに行いたいと思っているので
すが・・・

よろしくお願いいたします。

編集 削除
オショウ  2010-12-11 19:53:05  No: 72137  IP: [192.*.*.*]

私は使ったこと無いのですが最近IIS関連のことやってましたので
検索したら、以下の情報がありました。

http://forums.iis.net/t/1165056.aspx

以上。参考まで

編集 削除
どらちん  2010-12-13 13:55:36  No: 72138  IP: [192.*.*.*]

オショウさん

レスありがとうございます!
かなり参考になり、おしいところまでいけました。

IAppHostAdminManager *pMgr = NULL;
IAppHostElement *pParentElem = NULL;
IAppHostMethodCollection *pMethodCol = NULL;
IAppHostMethod *pMethod = NULL;
IAppHostMethodInstance *pMethodInstance = NULL;
VARIANT vtItemName;
BSTR bstrMethodName = NULL;
VARIANT vtSite;
VARIANT vtVirtualPath;
HRESULT hr = S_OK;
BSTR bstrSectionName = SysAllocString( L"system.webServer/media/liveStreaming" );

// Initialize
hr = CoInitializeEx( NULL, COINIT_MULTITHREADED );

hr = CoCreateInstance( __uuidof( AppHostAdminManager ), NULL, CLSCTX_INPROC_SERVER, __uuidof( IAppHostAdminManager ), (void**) &pMgr);

hr = pMgr->GetAdminSection( bstrSectionName, L"MACHINE/WEBROOT/APPHOST", &pParentElem );
hr = pParentElem->get_Methods(&pMethodCol);

VariantInit(&vtItemName);
vtItemName.vt = VT_BSTR;
bstrItemName = SysAllocString(L"GetPublishingPoints");
vtItemName.bstrVal = bstrItemName;
hr = pMethodCol->get_Item(vtItemName, &pMethod);

//テストでメソッド名を取得してみる
hr = pMethod->get_Name(&bstrMethodName);

hr = pMethod->CreateInstance(&pMethodInstance);

VariantInit(&vtSite);
vtSite.vt = VT_BSTR;
vtSite.bstrVal = SysAllocString(L"Streaming");
hr = pMethodInstance->SetMetadata(L"siteName", vtSite);

VariantInit(&vtVirtualPath);
vtVirtualPath.vt = VT_BSTR;
vtVirtualPath.bstrVal = SysAllocString(L"/");
hr = pMethodInstance->SetMetadata(L"virtualPath", vtVirtualPath);

hr = pMethodInstance->Execute();


かなりはしょってますが、このような流れで作成しています。
テストでメソッド名をとるところまではうまくいけているのですが、メソッド
に引数を割り当てて実行するところでうまくいかず・・・

Executeメソッドで「データが無効です」とのエラーになっているようです。
試しに、ご教授いただいたサイトのサンプルスクリプトを編集して、上記siteNameとvirtualPathを指定したところ名前の取得ができたので、これらの
値は間違っていないようなのですが・・・

IIS絡みのインターフェイスなどをほとんど使ったことないので、おそらく引
数(siteName、virtualPath)の指定が間違っているのではないかな〜?という
ところまでしかけん等がつかず・・・

IAppHostMethod::CreateInstanceで、生成したインスタンスの引数の設定方法
は、IAppHostMethodInstance::SetMetadataメソッドでよいのでしょうか?

もし、問題ないとすると、おそらく引数が足りないなどするのだと思いますが、
引数を確認する方法などはあるのでしょうか?

お手数をおかけして大変申し訳ありませんが、なにとぞご教授のほど、よろしくお願いいたします。

編集 削除
どらちん  2010-12-15 19:17:21  No: 72139  IP: [192.*.*.*]

解決したわけではないのですが、本件も含め、行おうと思っていた全体的な処
理をすべてVBScriptで対応できることが判明したため、社内でVBScriptで作成
することになり、VC++で作成していたものは利用しなくなってしまいました。

オショウさん
貴重な情報、ありがとうございました!
教えていただいたURLをもとに、Smooth StreamingのPublishing pointの状態
を(VBSでですが)取得できました。

編集 削除