- PR -

XMLデータからのWMIクラスオブジェクトの復元

1
投稿者投稿内容
ポチャ
会議室デビュー日: 2007/10/31
投稿数: 2
投稿日時: 2007-10-31 13:45
初めて投稿させて頂きます。

過去に保存しておいたWMI形式のXMLデータから、WMIクラスオブジェクトを
生成(復元)することは可能でしょうか?

ある時点でのWMI情報のスナップショットを保持したいと考えており、
以下のような手順をイメージしています。

 (1) WMIを使って何らかの情報(例えば「Win32_Service」)を取得する。

 (2) (1)で取得した情報をManagementObjectクラスのGetText(TextFormat)
   メソッドを使用して取得したWMI情報をXML形式に変換し、DBに保存する。

 (3) 必要に応じて(2)で取得したXMLデータを使って、ManagementObject
   クラスを復元する。

上記手順での(3)もしくはそれに該当する方法が分からず行き詰っています。
(出来ないという情報も見つからず・・・)


参考サイトなどありましたらご教授お願いします。

言語 : C# 2005
環境 : .NET Framework 2.0、Windows XP SP2
ひろ
会議室デビュー日: 2007/09/19
投稿数: 9
投稿日時: 2007-10-31 13:55
#違っていたらごめんなさい。

ManagementObjectってSerializableAttributeが付いているのでシリアライズ/デシリアライズが可能では?

であれば、
(2) ManagementObjectをシリアライズした結果をDBに保存する。
(3) 必要に応じて(2)で取得したデータを使用してデシリアライズする。
ってのでは駄目ですか?
ポチャ
会議室デビュー日: 2007/10/31
投稿数: 2
投稿日時: 2007-10-31 18:59
ひろさん、コメントありがとうございます。

確かに、ManagementObjectには、SerializableAttributeが付いていますね。
すみません、まったく気にかけていませんでした。

が、シリアライズがうまく行きません・・・。

以下ソースの★の部分でエラーになってしまいます。

{"型 System.ComponentModel.ISite のメンバ System.ComponentModel.Component.Site はインターフェイスなのでシリアル化できません。"}

ManagementClass managementClass = new ManagementClass("Win32_Service");
ManagementObjectCollection managementObj = managementClass.GetInstances();

using (FileStream stream = new FileStream(@"d:\\temp\\sample.xml", FileMode.Create))
{
★XmlSerializer serializer = new XmlSerializer(typeof(ManagementObject));

foreach (ManagementObject mo in managementObj)
{
serializer.Serialize(stream, (object)mo);
break;
}
}

自分でももう少し調べてみますが、もし手法などご存知でしたら
ご教授お願いします。
Hongliang
ぬし
会議室デビュー日: 2004/12/25
投稿数: 576
投稿日時: 2007-10-31 23:15
Serializable 属性は XmlSerializer とは関係ないですよ。System.Runtime.Serialization 以下の名前空間に属するクラスによるシリアライズを適用できることを示す属性です。

それよりも、なぜ ManagedObject を再構築する必要があるのかが疑問です。
その辺の理由(とかやりたいこと)を書いていただければ意外な解決策があるかもしれません。
1

スキルアップ/キャリアアップ(JOB@IT)