日期:2014-05-18  浏览次数:20832 次

Process类在webform中可以运行,但是在winform中却不可以运行
webform中的代码
C# code
protected void Button1_Click(object sender, EventArgs e)
        {
            if (FileUpload1.HasFile)
            {
                string filename = FileUpload1.FileName;
                //string extension=Path.GetExtension(filename);  //获取后缀名
                string file_name = filename.Substring(0, filename.LastIndexOf("."));//获取不含扩展名的文件名
                string file_storage = Server.MapPath("~/File/storage/") + filename; //原文件存放的路径
                FileUpload1.SaveAs(file_storage);
                string file_bowze = Server.MapPath("~/File/bowze/") + file_name + ".swf"; //转换为SWF格式后存放的路径
                string flash_file = Server.MapPath("~/FlashPaper2.2/FlashPrinter.exe");
                Process pro = new Process();
                pro.StartInfo.FileName = "cmd"; //调用CMD线程
                pro.StartInfo.UseShellExecute = false;
                pro.StartInfo.RedirectStandardInput = true;  //注册输入指向
                pro.StartInfo.RedirectStandardOutput = true;  //注册输出指向
                pro.StartInfo.CreateNoWindow = true; //不建新窗口,这个属性可以根据需要自己设定
                pro.StartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;  //隐藏窗口
                pro.Start();
                string input = string.Format("{0} {1} -o {2}", flash_file, file_storage, file_bowze);  //类似于在DOS界面要输入的内容
                pro.StandardInput.WriteLine(input); //将内容写到DOS   ---个人是这么理解的
                pro.StandardInput.WriteLine("exit");
                pro.WaitForExit(600000);
                string output = pro.StandardOutput.ReadToEnd(); //这句一定要加,输出转换好的SWF格式文件到指定位置 ,我一开始没加怎么都得不到文件
                pro.Close(); //关掉线程
            }
        }


这个在webform中是可以运行的
在winfrom中的代码如下,但是不可以运行

C# code
private void button2_Click(object sender, EventArgs e)
        {
            string flash_file = Application.StartupPath + "\\FlashPaper2.2\\FlashPrinter.exe";
            string file_storage = Application.StartupPath + "\\2.doc";
            string file_bowze = Application.StartupPath + "\\2.swf";
            Process pro = new Process();
            pro.StartInfo.FileName = "cmd"; //调用CMD线程
            pro.StartInfo.UseShellExecute = false;
            pro.StartInfo.RedirectStandardInput = true;  //注册输入指向
            pro.StartInfo.RedirectStandardOutput = true;  //注册输出指向
            pro.StartInfo.CreateNoWindow = true; //不建新窗口,这个属性可以根据需要自己设定
            pro.StartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Normal;  //隐藏窗口
            try
            {
                pro.Start();
                string input = string.Format("{0} {1} -o {2}", flash_file, file_storage, file_bowze);  //类似于在DOS界面要输入的内容
                pro.StandardInput.WriteLine(input); //将内容写到DOS   ---个人是这么理解的
                pro.StandardInput.WriteLine("exit");
                pro.WaitForExit(600000);
                string output = pro.StandardOutput.ReadToEnd(); //这句一定要加,输出转换好的SWF格式文件到指定位置 ,我一开始没加怎么都得不到文件
                pro.Close(); //关掉线程
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message.ToString());
            }
        }


请教一下了,谢谢了

------解决方案--------------------
请检查您每一步的完整路径,尤其是
string flash_file = Application.StartupPath + "\\FlashPaper2.2\\FlashPrinter.exe";
string file_storage = Application.StartupPath + "\\2.doc";
string file_bowze = Application.StartupPath + "\\2.swf";

你打印出看什么,真的存在这些路径