2010-08-07 2 views
0

, когда я запускаю этот код:Как запустить System.Diagnostics.Process в C#?

 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(); 

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

+1

Что происходит, когда вы пишете, из cmd.exe, "print file.html"? (Убедитесь, что вы вошли в систему как один и тот же пользователь, который запускает ваш код). –

+0

В нем говорится: «Не удалось инициализировать устройство PRN» – Saeed

+0

Я распечатаю html-файл. – Saeed

ответ

1

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

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

+0

у него есть проблема. кажется, что мне нужно установить программу для печати html-файла – Saeed

+0

Можете ли вы подробно остановиться на проблеме, которую у вас есть? Например, что такое сообщение об ошибке, которое вы видите? И если вы щелкнете правой кнопкой мыши по файлу HTML в проводнике Windows, вы видите параметр «печать» в контекстном меню? Если вы не видите такой вариант, вы можете попытаться исправить это в первую очередь. – Mhmmd

+0

Я не вижу там опции печати. как я могу исправить эту новую проблему ?! – Saeed

1

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

Например:

Process.Start("IExplore.exe", @"C:\myPath\file.html"); 
+0

Я хочу распечатать html-файл – Saeed

+0

Как я могу это сделать? с каким приложением? – Saeed

Смежные вопросы