Как добавить пользовательское свойство в объект System.Managment с помощью WMI, C # в приложении ASP.Net? - PullRequest
2 голосов
/ 16 февраля 2010

AA

Я хочу добавить пользовательское свойство в коллекцию свойств объекта WMi. Так что всякий раз, когда я получаю свойства этого объекта, я также получаю добавленное свойство. Говоря конкретно, давайте посмотрим на следующий код.

foreach (ManagementObject WebSite in WebSitesCollection)
        {
            if (WebSite.Properties["Name"].Value.ToString().Contains(appPoolName))
            {
                foreach (PropertyData propertyData in WebSite.Properties)
                {
                    try
                    {

                        HttpContext.Current.Response.Write(propertyData.Name + "  " + propertyData.Value + "<br/>");
                        if (propertyData.Name.Equals("Enable32BitAppOnWin64"))
                        {
                            AppPoolx.SetPropertyValue("Enable32BitAppOnWin64", true);
                            AppPoolx.Put(); return true;
                        }
                        else
                        {
                         AppPoolx.Properties.Add("Enable32BitAppOnWin64", true);
                          AppPoolx.Put(); return true;
                        }

                    }
                    catch (Exception ex1)
                    {
                        HttpContext.Current.Response.Write("Error Ocurred while Setting Property: " + ex1.Message + "<br />");
                        break;
                    }
                }
            }

        }

Но AppPoolx.Properties.Add("Enable32BitAppOnWin64", true); возвращает ошибку

Операция недействительна из-за текущего состояния объекта.

Мне было интересно, можно ли вообще добавить пользовательское свойство в объект WMi. Если для чего нужна эта функция Add ()?

В любом случае, как правильно добавить «Пользовательское свойство в объект WMI».

Пожалуйста, не предлагайте мне хранить в БД.

Привет

Steve

1 Ответ

2 голосов
/ 12 июля 2011

Объекты WMI в основном являются объектами com, во многом как объект C #, эти объекты заполняются кодом на другом конце.

Чтобы добавить это настраиваемое свойство, вам потребуется функциональность в коде на другом конце для хранения данных объекта для вашего настраиваемого свойства.

Метод add property, который вы вызываете, недопустим для всех (в значительной степени большинства) com-объектов, которые возвращаются API-интерфейсами WMI. Вероятно, это ваша проблема, я понимаю, что это связано с тем, как объекты из WMI вызывают маршалируются из компонента com, из которого они вызываются.

Итак, вкратце: Это вряд ли возможно.

Более правильным подходом было бы определить фактический тип объекта, с которым вы работаете, и установить значение свойства для свойства, доступного для записи для объекта, а затем передать его обратно в WMI API.

...