Запустите файл на сервере из WPF, нажмите кнопку - PullRequest
0 голосов
/ 09 апреля 2019

Некоторый код приложения, использующий Process.Start() и PsExec.exe для запуска видео на serverpc, работает нормально при запуске из консольного приложения, но не при нажатии кнопки в приложении WPF. Это меня сегодня ошарашило.

Итак:

Я запускаю небольшое приложение WPF на ПК, которое после нажатия кнопки отправит команду на серверный ПК для запуска видеофайла. Я использую 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();

Нет, этот точно такой же код может открывать видеофайл Photoslideshow.mp4 на сервере (192.168.1.3) при запуске из обычного консольного приложения. Однако, когда я пытаюсь запустить его после нажатия кнопки в приложении 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:\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();
    }
}

Когда я попытался использовать p.Start для файла, который является локальным для моего компьютера, он открылся, как и ожидалось. Это просто сервер, который не «видит» FileName. Как я уже говорил, тот же код не срабатывает только на p.Start при доступе к нему после нажатия кнопки.

Что я делаю не так? Пожалуйста, кто-нибудь, скажите мне, что это результат нескольких часов перед ПК и что это только глупая ошибка, которую я не вижу!

EDIT:

После дополнительной игры я понял, что ошибка «Система не может найти указанный файл» связана с этой строкой: p.StartInfo.FileName = @ "C: \ Windows \ System32 \ PsExec.exe";

введите описание изображения здесь

После изменения этой строки на:

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

и удалив следующую строку, Блокнот открывается на моем локальном ПК. Тем не менее, когда я изменяю 2 строки обратно на что-то вроде:

p.StartInfo.FileName = @ "Notepad.exe"; p.StartInfo.Arguments = @ "\ 192.168.1.3 -u Администратор -p pass-i cmd.exe / c НАЧАЛО C: \ realtek.txt"; ...

Блокнот открывается на моем локальном компьютере, но ошибка «Сетевой путь не найден». (что похоже на ошибку, когда я запускаю 'non-button-code.)

Таким образом, я знаю, что проблема связана с приложением WPF / Button. Но я не знаю, в чем проблема!

спасибо большое, Mario

1 Ответ

0 голосов
/ 10 апреля 2019

Мне удалось понять это.

По какой-то причине система не нашла PSExec по этому пути (даже если он существовал в этой папке).p.StartInfo.FileName = @ "C: \ Windows \ System32 \ PsExec.exe";

После копирования файла в другой каталог и использования полного пути он наконец заработал.

...