1

C# の Winform .NET 4.0 で複数のリモート デスクトップ接続のスクリプトを作成しようとしています。

_serverList のサーバー名のリストを指定すると、

        var startInfo = new ProcessStartInfo
        {
            FileName = "cmd.exe",
            RedirectStandardInput = true,
            RedirectStandardOutput = true,
            UseShellExecute = false,
            CreateNoWindow = false
        };

        var process = new Process { StartInfo = startInfo };

        process.Start();

        foreach (string server in _serverList)
        {

            process.StandardInput.WriteLine(@"mstsc.exe /v:" + server);         
        }

ローカル デスクトップ (Windows 7) で実行すると、完全に正常に動作します。すべてのサーバーが起動されますが、アプリケーションをサーバー (Windows Server 2003 r 2) に移植すると、これをトリガーするイベントが発生し、エラーが発生します。

「mstsc.exe」は、内部コマンドまたは外部コマンド、操作可能なプログラムまたはバッチ ファイルとして認識されませんでした

私は、mstsc.exe のフル パスを提供し、FileName = "mstsc.exe" を変更し、サーバー名を引数として提供するというバリエーションを試みましたが、どれも機能しませんでした。

サーバーで cmd.exe を起動し、手動で「mstsc.exe /v: someservername」と入力すると、動作は期待どおりで、適切なサーバーが起動されます。

何がうまくいかないのかについての洞察をいただければ幸いです

4

2 に答える 2

0

ご提供いただいたコードを Windows Server 2012 R2 で問題なく実行できました。ここで動作している OS に何らかのセキュリティ メカニズムが存在する可能性があります。実行可能ファイルの権限を手動で昇格させてみましたか?

それが機能する場合は、この投稿を確認できます。

プログラムでプロセス特権を昇格させますか?

于 2014-07-03T00:32:44.527 に答える
0

が false に設定されている場合UseShellExecute、FileName プロパティを設定するときに実行可能ファイルへのフル パスを指定する必要があります。環境変数が正しく機能しません。Windows Server 2003 R2 で「mstsc.exe」の場所を検索します。Windows 7 についても同じことを行います。これらのパスは異なる可能性が高いため、問題が説明されます。

OperatingSystemなどのヘルパー クラスを使用して、OS、プロセッサ (EG x86 ディレクトリ)、%systemroot%環境の違いなどの違いに基づいて正しいパスを選択的に選択します。その後、app.config で適切な値を設定できます。

于 2012-06-28T14:50:14.623 に答える