2

機能していないWindowsサービスに使用される資格情報を更新するコードのセクションをデバッグしようとしています。例外をスローせず、適用されたことを示すチェックに合格しません。

MSDNでは、コンストラクターについて次のように説明しています。

public Object InvokeMethod(
    string methodName,
    Object[] args
)

私が理解していないのは、methodName渡した文字列をどこで検索するかです。私の想定では、更新しようとしているサービスのコードを検索します。ただしChange、コードが更新しようとするサービスにはメソッドがありません。

このCodeProjectチュートリアルは、ソースコードに存在しない「create」と「delete」を使用しているため、methodNameに有効な引数のリストがあることも示しているようです。

String serviceName = "Scan Data Service";

using (ManagementObject service = new ManagementObject(new ManagementPath("Win32_Service.Name='" + serviceName + "'")))
{
    Object[] wmiParams = new Object[11];
    if (arguments == null)
    {
        wmiParams[6] = "LocalSystem";
        wmiParams[7] = "";
    }
    else
    {
        wmiParams[6] = arguments[0]; //Username
        wmiParams[7] = arguments[1]; //Password
    }
    service.InvokeMethod("Change", wmiParams);
}
SelectQuery query = new SelectQuery("select startname from Win32_Service where name = '" + serviceName + "'");

bool updated = false;

using (ManagementObjectSearcher searcher = new ManagementObjectSearcher(query))
{
    foreach (ManagementObject service in searcher.Get())
    {
        String startName = service["startname"].ToString();

        if ((String.Compare(startName, "LocalSystem", true) == 0 && arguments == null) ||
            (arguments != null && String.Compare(startName, arguments[0], true) == 0))
        {
            updated = true;
        }
    }
}

InvokeMethod()すべてのサービスに有効などこかのmethodName引数のリストはありますか?または、何らかの方法で読み取ったり反映したりする必要があるサービスコードに実装されているものがあるはずですか?

4

1 に答える 1

1

解決しました。

WMIで何をしているかによって異なります。これは、Win32_Serviceクラスを使用するサービスを使用していたため、対象のメソッド名がこれに属しているためです。

もちろん、さまざまなタスクにメソッドを利用できるWin32クラスは他にもたくさんあります。

于 2013-03-06T14:08:03.387 に答える