C#System.Diagnostics.Process动词问题

时间:2009-12-04 18:28:53

标签: c# system.diagnostics

我有一个用C#VS 2008编写的Windows应用程序。此应用程序的目的是将任何文件转换为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传真和图片查看器)。 我的问题是如何在Process.Start()方法中使用“Print”动词?

提前谢谢

3 个答案:

答案 0 :(得分:1)

为strInputFilePath发送了什么?文档说只发送文件名,所以如果你发送可能导致问题的整个路径。

答案 1 :(得分:1)

不,发送没有扩展名的文件名将失败。

最终使用System.Diagnostics.Process打印任意文件最多是不可预测的。这完全取决于您的操作系统如何处理每种类型的文件,以及您的注册表是否已正确配置以处理该文件。

我猜测以这种方式打印.doc文件可能正常,而其他文件类型可能无法正常工作。

在我看来,你应该找到一些关于你可以“自动”打印的文件类型的限制,并为每种类型的文件构建工作解决方案。否则,你会发现很多不可预测的行为。

答案 2 :(得分:1)

您是否尝试过研究是否可以使用命令行参数执行Adobe Reader来完成相同的操作?有时依赖shell是不可能的。