14

System.Diagnostics.Processクラスを使用して、c#のリモートコンピューターでコンピューター名= "someComputer"などのプロセスを開始するにはどうすればよいですか?

そのリモートコンピューター上に、「Helloworld」をtxtファイルに書き込むだけの小さなコンソールアプリを作成しました。これをリモートで呼び出したいと思います。

コンソールアプリのパス:c:\ MyAppFolder \ MyApp.exe

現在私はこれを持っています:

ProcessStartInfo startInfo = new ProcessStartInfo(string.Format(@"\\{0}\{1}", someComputer, somePath);

            startInfo.UserName = "MyUserName";
            SecureString sec = new SecureString();
            string pwd = "MyPassword";
            foreach (char item in pwd)
            {
                sec.AppendChar(item);
            }
            sec.MakeReadOnly();
            startInfo.Password = sec;
            startInfo.UseShellExecute = false;

            Process.Start(startInfo);

「ネットワークパスが見つかりませんでした」というメッセージが表示され続けます。

4

5 に答える 5

17

http://technet.microsoft.com/en-us/sysinternals/bb897553.aspxからPsExecを使用できます

またはWMI:

object theProcessToRun() = { "YourFileHere" };

ManagementClass theClass = new ManagementClass(@"\\server\root\cimv2:Win32_Process");

theClass.InvokeMethod("Create", theProcessToRun);
于 2010-02-26T18:06:39.627 に答える
15

次のいずれかを使用します。

または、必要に応じて、独自のサービスまたは COM コンポーネントを挿入します。これは、PsExec が行うことに非常に近いものです。

これらすべての方法の中で、私はタスク スケジューラを好みます。それらすべての中で最もクリーンな API だと思います。リモート タスク スケジューラに接続し、実行可能ファイルの新しいタスクを作成して実行します。注: 実行可能ファイルの名前は、そのマシンに対してローカルである必要があります。\servername\path\file.exe ではなく、c:\path\file.exe です。気が向いたらタスクを削除してください。

これらすべての方法では、ターゲット マシンへの管理アクセス権が必要です。

ProcessStartInfoリモート プロセスを起動することはできません。

于 2010-07-09T15:52:12.663 に答える
7

MSDNによると、Processオブジェクトはリモートプロセスへのアクセスのみを許可し、リモートプロセスを開始または停止する機能は許可しません。したがって、このクラスの使用に関する質問に答えるのはできません。

于 2010-02-26T18:11:33.550 に答える
-5

UNCパスを介して直接プロセスを開始できるとは思いません。つまり、System.ProcessがWindows comspecを使用してアプリケーションを起動する場合、ドライブを「\ someComputer \ somePath」にマッピングし、ProcessStartInfoの作成をそれに変更して、この理論をテストするのはどうでしょうか。そのように機能する場合は、プログラムでドライブを一時的にマッピングし、アプリを起動してから、マッピングを削除することを検討してください(コマンドウィンドウからpushd / popdが機能するのと同じように)。

于 2010-02-26T18:06:57.053 に答える