【问题标题】:Run File on Server from WPF Button Press通过 WPF 按钮在服务器上运行文件
【发布时间】:2019-08-31 03:42:34
【问题描述】:

使用Process.Start()PsExec.exe 在serverpc 上启动视频的某些应用程序代码在从控制台应用程序运行时运行正常,但在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:\Windows\System32\PsExec.exe";
p.StartInfo.Arguments = @"\\192.168.1.3 -u Administrator -p hagarmikejessav -i cmd.exe /c START E:\Media\FerroniConcettaAapp\Videos\Photoslideshow.mp4";
            p.StartInfo.CreateNoWindow = true;
            p.Start();

不,当从普通控制台应用程序运行时,此完全相同的代码可以在服务器 PC (192.168.1.3) 上打开视频文件 Photoslideshow.mp4。但是,当我在 WPF 应用程序中按下按钮后尝试运行它时,p.Start() 给了我一个“系统找不到指定的文件”错误。这是WPF代码sn-p(同上):

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:\Windows\System32\PsExec.exe";
        p.StartInfo.Arguments = @"\\192.168.1.3 -u Administrator -p hagarmikejessav -i cmd.exe /c START E:\Media\FerroniConcettaAapp\Videos\Photoslideshow.mp4  //fullscreen";
        p.StartInfo.CreateNoWindow = true;
        p.Start();
    }
}

当我尝试在我的 PC 本地的文件上使用 p.Start 时,该文件按预期打开。只是服务器没有“看到”文件名。正如我最初所说,相同的代码仅在单击按钮后访问它时在 p.Start 上失败。

我做错了什么?请有人告诉我这是在电脑前几个小时的结果,这只是一个我看不到的愚蠢错误!

编辑:

在玩了更多之后,我意识到与此行有关的错误“系统找不到指定的文件”: p.StartInfo.FileName = @"C:\Windows\System32\PsExec.exe";

enter image description here

将此行更改为:

p.StartInfo.FileName =@"C:\Windows\System32\Notepad.exe";

删除下一行后,记事本会在我的本地 PC 上打开。但是,当我将 2 行改回如下内容时:

p.StartInfo.FileName = @"Notepad.exe"; p.StartInfo.Arguments = @"\192.168.1.3 -u 管理员 -p pass -i cmd.exe /c START C:\realtek.txt";...

记事本在我的本地 PC 上打开,但出现错误“找不到网络路径”。 (这与我运行“非按钮代码”时的错误类似。)

因此,我知道问题与 WPF/Button 应用程序有关。但是不知道是什么问题!

非常感谢, 马里奥

【问题讨论】:

  • 感谢您的及时回复。我确实尝试了该代码。事实上,我之前已经尝试过,并且计划任务从未在远程PC上打开过。这是我在恢复到 PsExec 之前的最后一次尝试。建立连接,显示作业 ID 和当前时间。但是,服务/应用程序永远不会在远程 PC 上打开。但是,使用 PsExec,应用程序会在远程服务器上打开。当我将代码包装在 WPF 中的按钮控件中时,它只是没有打开。这是我的问题。

标签: c# wpf psexec system.diagnostics


【解决方案1】:

我设法弄明白了。

由于某种原因,系统没有从该路径中找到 PSExec(即使它存在于该文件夹中)。 p.StartInfo.FileName = @"C:\Windows\System32\PsExec.exe";

将文件复制到另一个目录并使用完整路径后,它终于起作用了。

【讨论】: