[C# WMI] Array Method Parameter

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Hoi,

Zou iemand mij kunnen helpen met het volgende, ik ben in C# (Mono) aan het ontwikkelen en roep in mijn proggie een WMI Method aan. Deze method heeft een aantal parameters en één daarvan is een Array.

Nu heb ik al verschillende manieren geprobeerd, maar telkens weigert het proggie de gegevens weg te schrijven.

C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
ManagementScope oMs = new ManagementScope(@"\\localhost\root\HewlettPackard\OpenView\data");
oMs.Connect();
ManagementClass cls = new ManagementClass(oMs.Path.Path, "OV_Service", null);
ManagementBaseObject inParams = cls.GetMethodParameters("Create");
                
// Fill in the parameters
inParams["Caption"] = strDescription;
inParams["ServiceTypeID"] = "folder";
inParams["HostingType"] = "0";
inParams["ParentName"] = "ApplicationServices";
inParams["Name"] = "AppView:" + strAppname;
inParams["Description"] = "Application View for : " + strDescription;

//Execute the method
cls.InvokeMethod ("Create", inParams, null);


Bovenstaande code werkt prima! Hier zit ook niet het probleem in. De volgende parameter is ook beschikbaar: string Attributes[]

Zie hier de uitleg vanuit de help van de API:

code:
1
2
3
4
5
6
7
8
9
OV_Service Create( 
[in] string Caption, 
[in] string ServiceTypeId, 
[in, optional] sint32 HostingType, 
[in, optional] string HostedOnName, 
[in, optional] string ParentName, 
[in, optional] string Name, 
[in, optional] string Description, 
[in, optional] string Attributes[] )


Uitleg bij de Attributes[] parameter is gering:

Attributes
The Attributes array property of the instance of Service to be created. Optional parameter.


Ik kom er alleen niet achter hoe mijn code regel van de Attributes[] moet worden.
Dit werkt in ieder geval niet...

C#:
1
inParams["Attributes[]"] = "Icon = Service.ico";


Iemand een idee?

Alvast enorm bedankt!

Groeten,

Jeroen

Acties:
  • 0 Henk 'm!

  • Mozin
  • Registratie: November 2000
  • Laatst online: 04-06-2023

Mozin

Gewoon een gamer

Ik denk dat je eerst de array moet initieren om 'm vervolgens te kunnen vullen. Afhankelijk van hoe de ManagementBaseObject class werkt, wordt dat dan iets in de richting van:

C#:
1
2
inParams["Attributes"] = new string[1];
inParams["Attributes"][0] = "Icon = Service.ico";

of
C#:
1
2
inParams["Attributes[]"] = new string[1];
inParams["Attributes[0]"] = "Icon = Service.ico";

Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 14:05

.oisyn

Moderator Devschuur®

Demotivational Speaker

Attributes is de naam van de parameter, niet Attributes[]. Die [] geeft aan dat het een array is, van strings in dit geval, dus je moet inParams["Attributes"] gewoon een array van strings toekennen.

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Verwijderd

Topicstarter
Yep dat was um! Heel veel thanx .oisyn en Mozin!

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
In navolging op eerdere berichtgeving, heb ik nog een vervolg vraag hierop...

Nu gaat de OV_Service over een ClassMethod binnen WMI. Nu zijn er ook instance Methods die aangeroepen kunnen worden. Dit zou ik graag willen doen, maar ik stuit iedere keer op fouten.

Het betreft de volgende Instance Method:
C#:
1
2
3
4
5
boolean AddAntecedentService( 
[in] string AntecedentName, 
[in, optional] string PropRuleId, 
[in, optional] real32 WeightFactor, 
[in, optional] sint32 State) 


De volgende info wordt in de help weergegeven:

Calling Convention
These methods can be called only from a WMI instance object.

Return Value
False if the relationship already exists (this service is already dependent on the specified service).

Ik heb getracht deze Instant Method op dezelfde wijze aan te roepen, maar dan als onderdeel van de Class:
C#:
1
2
3
ManagementBaseObject outParams = cls.GetMethodParameters("AddAntecedentService");
outParams["AntecedentName"] = strLongName.ToLower();
cls.InvokeMethod("AddAntecedentService", outParams, null);


Hierop krijg ik helaas de foutmelding: Invalid method Parameter(s)

Heeft iemand een tip/tips hoe ik dit zou kunnen aanpakken?

Alvast bedankt!