C # System.Diagnostics.Process проблема глагола - PullRequest
4 голосов
/ 04 декабря 2009

У меня есть приложение для Windows, написанное на C # VS 2008. Цель этого приложения - преобразовать любой файл в файл PDF. Я нашел код, который работает с файлами, но есть небольшая проблема, с которой я сталкиваюсь.

Сначала вот код:

        private void PrintToAdobePDF(string strInputFilePath)
    {
        ProcessStartInfo pProcInfo = new ProcessStartInfo();
        bool blResult;

        blResult = SetDefaultPrinter(D2P_Adobe_Printer);
        if (blResult)
        {
            pProcInfo.FileName = strInputFilePath;
            pProcInfo.Verb = "Print";
            pProcInfo.CreateNoWindow = true;
            pProcInfo.WindowStyle = ProcessWindowStyle.Hidden;

            Process pProc = Process.Start(pProcInfo);
            pProc.WaitForExit(1000);
            pProc.CloseMainWindow();
            pProc.Close();
        }

Проблема, с которой я столкнулся, заключается в том, что когда вызывается метод Process.Start (), он работает с ДВУМ глаголами вместо того, который я указал («Печать»). Он запускает «Открыть» и «PrintTo», что делает приложение, из которого получается исходный файл, откройте и повесьте приложение (то есть jpg открывает Windows Fax and View Viewer). У меня вопрос: как мне использовать глагол «Печать» в методе Process.Start ()?

Заранее спасибо

Ответы [ 3 ]

1 голос
/ 04 декабря 2009

Нет, отправка имени файла без расширения завершится неудачей.

В конечном итоге использование System.Diagnostics.Process для печати любого произвольного файла будет в лучшем случае непредсказуемым. Все зависит от того, как ваша операционная система обрабатывает каждый тип файла, и от того, правильно ли настроен ваш реестр для обработки этого файла.

Я думаю, что печать файлов .doc таким образом, вероятно, работает нормально, в то время как другие типы файлов могут работать не так хорошо.

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

1 голос
/ 04 декабря 2009

Вы пытались исследовать, возможно ли запустить Adobe Reader с параметром командной строки, который выполняет то же самое? Опора на оболочку иногда сомнительна.

1 голос
/ 04 декабря 2009

Что отправляют для strInputFilePath? В документации сказано только отправлять имя файла, так что если вы отправляете весь путь, который мог вызвать проблему.

...