在Windows Server 2003 r2上从Winform启动mstsc.exe

时间:2012-06-27 17:03:43

标签: c# command cmd remote-desktop

我试图在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"时,行为符合预期,并启动了正确的服务器。

对于出现问题的任何见解将不胜感激

2 个答案:

答案 0 :(得分:0)

UseShellExecute设置为false时,您必须在设置FileName属性时提供可执行文件的完整路径,但环境变量无法正常运行。在Windows Server 2003 R2上搜索“mstsc.exe”的位置。对Windows 7执行相同的操作。这些路径可能不同,这可以解释问题。

使用辅助类(如OperatingSystem)根据OS,处理器(EG x86目录),%systemroot%环境差异等差异选择正确的路径。然后可以设置正确的路径app.config中的值。

答案 1 :(得分:0)

我能够在Windows Server 2012 R2上运行您提供的代码。可能的是,操作系统中可能存在一些安全机制。您是否尝试过手动提升可执行文件的权限?

如果有效,你可以查看这篇文章:

Elevating process privilege programmatically?