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



我正在尝试在 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 的完整路径、更改文件名 = "mstsc.exe" 并将服务器名称作为参数提供的变化,但没有一个有效。

当我在服务器上启动cmd.exe并手动输入"mstsc.exe/v:someservername"时,行为符合预期,并启动了正确的服务器。

任何关于问题所在之处的见解将不胜感激

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

使用帮助程序类(如操作系统)根据操作系统、处理器(例如 x86 目录))、%systemroot%环境差异等差异有选择地选择正确的路径。 然后,您可以在 app.config 中设置正确的值。

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

如果可行,您可以查看这篇文章:

以编程方式提升进程权限?

相关内容

最新更新