Некоторый код приложения, использующий 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