Process.Start()中的错误 - 系统找不到指定的文件

时间:2013-05-28 09:32:05

标签: c# sql-server

我正在使用以下代码从数据库中获取文件并使用下拉列表中填充的已安装打印机中选定的打印机进行打印,我的问题是在使用 Printjob.Start()时抛出例外系统找不到指定的文件

我的代码是,

protected void ggvqpdetail_RowCommand(object sender, GridViewCommandEventArgs e)
{
    if (e.CommandName.ToUpper().ToString() == "PRINTREC")
    {
        try
        {
            // Set the printer to a printer in the dropdown box when the selection changes. 
            PrintDocument printDoc = new PrintDocument();
            string a = TextBox1.Text + TextBox2.Text + TextBox3.Text;
            DataSet ds = ExamManagement.SP.Eval_QP_PrintSelect(a).GetDataSet();
            if (ddlprint.SelectedIndex != -1 && ds.Tables[0].Rows.Count > 0)
            {
                // The dropdown box's Text property returns the selected item's text, which is the printer name.
                printDoc.PrinterSettings.PrinterName = ddlprint.Text;

                Process printJob = new Process();
                printJob.StartInfo.FileName = ds.Tables[0].Rows[0]["Data"].ToString();
                printJob.StartInfo.UseShellExecute = true;
                printJob.StartInfo.Verb = "printto";
                printJob.StartInfo.CreateNoWindow = true;
                printJob.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
                printJob.StartInfo.Arguments = ddlprint.Text;
                printJob.StartInfo.WorkingDirectory = Path.GetDirectoryName(ds.Tables[0].Rows[0]["Data"].ToString());
                printJob.Start();
            }
        }
        catch(Exception ex)
        {
            Lblmsg.Visible = true;
            Lblmsg.Text = ex.Message;
        }
    }
}

1 个答案:

答案 0 :(得分:2)

显然问题取决于你实际放在printJob.StartInfo.FileName中的问题。价值来自数据库,因此唯一能够调查它的人是。查看ds.Tables[0].Rows[0]["Data"]中您拥有的文件名,并确保该文件存在且您可以访问本地客户端,并尝试从中进行打印。当然,这也揭示了您的解决方案的弱点,该解决方案似乎在数据库中存储文件名,并期望该名称是每个客户端上的有效本地文件。不太可能是真的。