我正在尝试在 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上运行您提供的代码。 操作系统中可能存在一些安全机制在这里起作用。 您是否尝试过手动提升可执行文件的权限?
如果可行,您可以查看这篇文章:
以编程方式提升进程权限?