2

リモート サーバーに接続してバッチ ファイルを開始する、非常に単純な WMI メソッドがあります。

この実行からの戻りコードは 0 で、成功したことを示しています。バッチ ファイルへのパスを変更すると、9 が返されるので、コマンド ファイルを見つけていることがわかります。

問題は、サーバーを見ると、何も起こっていないことがわかります。このバッチ ファイルが最初に行うことは、ドライブから GIT リポジトリを削除することです。

私のコードは次のとおりです。

public object[] ProcessToRun;

    public void StartBuild()
    {
        ProcessToRun = BuildServerInfo.SelectedBranch == BuildServerBranch.Branch.Development ? new object[] { "c:\\src\\Build\\Batch1_Development.cmd" } : new object[] { "c:\\src\\Build\\Batch2_Release_Candidate.cmd" };
        var connection = new ConnectionOptions();

        connection.Impersonation = ImpersonationLevel.Impersonate;
        connection.Authentication = AuthenticationLevel.Packet;
        connection.EnablePrivileges = true;
        connection.Timeout = new TimeSpan(0,0,15);

        var mp = new ManagementPath("\\\\" + BuildServerInfo.BuildServer + "\\root" + "\\cimv2:Win32_LogicalDisk.DeviceID=\"C:\"");
        var ms = new ManagementScope(mp, connection);

        var mprocess = new ManagementClass(ms, new ManagementPath("Win32_Process"), new ObjectGetOptions());
        var results = mprocess.InvokeMethod("Create", ProcessToRun);
    }

これはコードの問題ですか、それともサーバーで何かする必要がありますか? サーバーは Windows 2008 R2 です。

ありがとう。

編集: 私のアカウントには完全な管理者権限があり、CIMV2\Security の下の WMI ユーザーには完全なアクセス権があります。

4

1 に答える 1

4

実行を機能させるには、作業ディレクトリを設定する必要があったようです。inParams を作成し、Invoke を次のように使用するように変更しました。

var inParams = mprocess.GetMethodParameters("Create");
        inParams["CommandLine"] = @"c:\src\Build\Batch1_Development.cmd";
        inParams["CurrentDirectory"] = @"c:\src\Build";

        var outParams = mprocess.InvokeMethod("Create", inParams, null);
于 2013-04-12T22:51:05.717 に答える