2

リモート マシン上の共有 (別のマシンを指す) にある ASP.NET Web サイトからプログラムを実行しようとしています。構成は次のようになります

Web サイト サーバー => コンピューター A (参照先の共有) => コンピューター B (exe はここにあります)

processName z:\tools\bin\myprogram.exe に次の引数を渡すと、パスが見つからないというリターン コードが返されます。プロセス名 \\computerB\tools\bin\myprogram.exe に次の引数を渡すと、アクセス拒否エラーが発生します。

private static int CreateRemoteProcess(string serverName, string username, string password, string processName, params string[] arguments)
{
    var connection = new ConnectionOptions
    {
        Username = username,
        Password = password
    };

    var scope = new ManagementScope(@"\\" + serverName + @"\root\cimv2", connection);
    using (var managementClass = new ManagementClass(scope,
                                                    new ManagementPath("Win32_Process"),
                                                    new ObjectGetOptions()))
    {
        var inputParams = managementClass.GetMethodParameters("Create");
        if (arguments != null)
        {
            foreach (var param in arguments)
            {
                processName += " " + param;
            }
        }

        inputParams["CommandLine"] = processName;
        var outParams = managementClass.InvokeMethod("Create",
                                                     inputParams,
                                                     new InvokeMethodOptions());
        outParams = managementClass.InvokeMethod("Create", inputParams, null);
        var ret = Convert.ToInt32(outParams["ReturnValue"]);
        return Convert.ToInt32(outParams["ProcessId"]);
    }
4

1 に答える 1

2

ドライブ文字を渡すのではなく、完全な UNC パスを使用してください。

Z: ドライブが不明で、「username」変数で渡したユーザーにマップされていません。(そう思うかもしれませんがそうではありません)

于 2013-10-04T09:20:26.527 に答える