某些使用Process.Start()
和PsExec.exe
在服务器 PC 上启动视频的应用程序代码在从控制台应用程序运行时运行正常,但在 WPF 应用程序中通过按钮按压运行时则运行不正常。这让我今天发疯了。
所以:
我在PC上运行一个小型WPF应用程序,一旦按下按钮,它将向服务器PC发送命令以运行视频文件。我正在使用 PsExec.exe 以交互方式在服务器上运行进程(未使用 WMI 进行管理) 这是我正在使用的代码:
Process p = new Process();
p.StartInfo.UseShellExecute = false;
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.RedirectStandardError = true;
p.StartInfo.RedirectStandardInput = true;
p.StartInfo.FileName = @"C:WindowsSystem32PsExec.exe";
p.StartInfo.Arguments = @"\192.168.1.3 -u Administrator -p hagarmikejessav -i cmd.exe /c START E:MediaFerroniConcettaAappVideosPhotoslideshow.mp4";
p.StartInfo.CreateNoWindow = true;
p.Start();
不,当从普通控制台应用程序运行时,此完全相同的代码可以在服务器PC(192.168.1.3)上打开视频文件Photoslideshow.mp4。但是,当我在 WPF 应用程序中按下按钮后尝试运行它时,p.Start()
给了我一个"系统找不到指定的文件"错误。下面是 WPF 代码片段(与上面相同):
private void Video1_btn_Click(object sender, RoutedEventArgs e)
{
try
{
Process p = new Process();
p.StartInfo.UseShellExecute = false;
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.RedirectStandardError = true;
p.StartInfo.RedirectStandardInput = true;
p.StartInfo.FileName = @"C:WindowsSystem32PsExec.exe";
p.StartInfo.Arguments = @"\192.168.1.3 -u Administrator -p hagarmikejessav -i cmd.exe /c START E:MediaFerroniConcettaAappVideosPhotoslideshow.mp4 //fullscreen";
p.StartInfo.CreateNoWindow = true;
p.Start();
}
}
当我尝试在我的 PC 本地文件上使用 p.Start 时,该文件按预期打开。只是服务器没有"看到"文件名。正如我最初所说,相同的代码仅在单击按钮后访问 p.Start 时失败。
我做错了什么?请有人告诉我,这是在PC前数小时的结果,这只是一个愚蠢的错误,我看不到!
编辑:
经过多次尝试,我意识到错误"系统找不到指定的文件"与此行有关: p.StartInfo.文件名 = @"C:\Windows\System32\PsExec.exe";
在此处输入图像描述
将此行更改为:
p.StartInfo.文件名 =@"C:\Windows\System32\Notepad.exe";
并删除下一行,记事本在我的本地PC上打开。但是,当我将 2 行改回类似这样时:
p.StartInfo.文件名 = @"Notepad.exe"; p.StartInfo.Arguments = @"\192.168.1.3 -u Administrator -p pass-i cmd.exe/c START C:\realtek.txt";...
记事本在我的本地PC上打开,但出现错误"找不到网络路径"。(这与我运行"非按钮代码"时的错误类似。
因此,我知道问题与WPF/按钮应用程序有关。但我不知道问题出在哪里!
多谢 马里奥
我设法弄清楚了。
由于某种原因,系统未从此路径找到 PSExec(即使它存在于该文件夹中)。 p.StartInfo.文件名 = @"C:\Windows\System32\PsExec.exe";
将文件复制到另一个目录并使用完整路径后,它终于起作用了。