Как запустить System.Diagnostics.Process в C #? - PullRequest
0 голосов
/ 07 августа 2010

когда я запускаю этот код:

        Process printjob = new Process();
        printjob.StartInfo.FileName = "file.html";
        printjob.StartInfo.UseShellExecute = true;
        printjob.StartInfo.Verb = "print";
        printjob.StartInfo.CreateNoWindow = true;
        printjob.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
        printjob.Start();

это исключение выдается:
«С указанным файлом для этой операции не связано приложение»
что мне делать?

Ответы [ 2 ]

1 голос
/ 07 августа 2010

Следующий фрагмент кода должен работать, но у него есть проблема, которая может нарушить условия сделки (читайте объяснение):

static void Main(string[] args)
{
    string pathToFile = "...";
    var processStartInfo = new ProcessStartInfo(); 
    processStartInfo.Verb = "print";
    processStartInfo.FileName = pathToFile;     

    var process = Process.Start(processStartInfo);
    process.WaitForExit();
}

Единственная проблема с кодом выше - это то, что он отобразит диалоговое окно печати. ​​ Мне не удалось найти способ подавить его, и, похоже, это проблема (или функция), специфичная для печати файлов HTML.

Существует ужасный обходной путь, еслиВы можете допустить, чтобы диалоговое окно печати появлялось в течение секунды или около того, то есть имитировать отправку клавиши «ввод» в диалоговое окно печати через код.Самый простой способ сделать это - использовать класс System.Windows.Forms.SendKeys, в частности метод SendWait.

Таким образом, пересмотренный фрагмент кода будет выглядеть следующим образом:

static void Main(string[] args)
{
    string pathToFile = "...";
    var processStartInfo = new ProcessStartInfo(); 
    processStartInfo.Verb = "print";
    processStartInfo.FileName = pathToFile;     

    var process = Process.Start(processStartInfo);

    System.Threading.Thread.Sleep(1000);
    System.Windows.Forms.SendKeys.SendWait("{ENTER}");

    process.WaitForExit();
}

Вызовна Sleep необходимо убедиться, что диалоговое окно печати полностью загружено и готово к получению пользовательского ввода перед отправкой нажатия клавиши.

HTH

1 голос
/ 07 августа 2010

На вашем компьютере ни одно приложение не связано с типом файла ".html".Если вы пытаетесь просмотреть его в веб-браузере, рассмотрите возможность запуска iexplore.exe (например, для запуска Internet Explorer), а затем включите file.html в качестве параметра.

Например:

Process.Start("IExplore.exe", @"C:\myPath\file.html");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...