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 上正常运行您提供的代码。操作系统中可能有一些安全机制在这里起作用。您是否尝试过手动提升可执行文件的权限?

如果可行,您可以查看此帖子:

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

于 2014-07-03T00:32:44.527 回答
0

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

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

于 2012-06-28T14:50:14.623 回答