问题描述:
    程序画面上有打开PDF的按钮,这个PDF文件的数据是从数据库中取出来的数据临时生成的PDF文件,保存在Temp目录下,当打开PDF文件,关闭的时候会去调用Exited事件。在Exited事件的消息响应函数中会把临时生成的文件删除掉。
下面我贴一段代码。
        private void Button_Click(object sender, EventArgs e)
        {
            //从数据库中取出来的数据临时生成的文件            string fileName = @"C:\Users\czsun.OBC-NET\AppData\Local\Temp\tmp5BB8.pdf";
            System.Diagnostics.Process process = new Process();
            process.EnableRaisingEvents = true;
            process.StartInfo.FileName = fileName;
            process.StartInfo.ErrorDialog = true;
            process.Exited += new EventHandler(process_Exited);
            process.Start();
        }        private void process_Exited(object sender, EventArgs e)
        {
            System.Diagnostics.Process process = sender as System.Diagnostics.Process;
            if (process != null)
            {
                if (File.Exists(process.StartInfo.FileName))
                {
                    File.Delete(process.StartInfo.FileName);
                }
            }
        }
第一次打开文件时候没有什么问题,当这个PDF文件没有关闭,我再次打开PDF文件的时候就会出错。原因就是我再次打开文件的时候会去走第一次生成的Process.Exited 消息响应函数,去删除第一次生成的PDF文件。然后就会出异常,提示要删除的文件正被另一个进程使用。怎么解决这个问题呢?请各位高人指导一下。不胜感激

解决方案 »

  1.   

    你PDF文件没有关闭肯定有问题啦,这样就会占有进程,你要先将这个打开PDF的进程kill掉
      

  2.   

    1楼你说的有道理,但是你强制KILL掉也不对的。原因是用户并没有关闭这个文件,你强制给关闭掉了也不对。
      

  3.   

    应该是你的pdf关闭的问题,你只调用一次看看。记得看进程关了没,要强制关掉进程。。
      

  4.   

    3楼,你好,谢谢你回答,我对一楼已经说过了。用户没有主动把PDF文件关闭掉你去强制关闭进程,这个是不对的。
      

  5.   

    临时文件名使用guid,避免重复,那就没有这个问题了。
      

  6.   

    哦,不好意思,我看错了,那你就强行kill掉。
    Process[] process = Process.GetProcessesByName("Acrobat.exe");//找到pdf进城
    if(process.Length > 0)
        process[0].Kill();要不你发现文件正被打开,就忽略不管
      

  7.   

    8楼,你这样做是没有办法对应的。
    Process[] process = Process.GetProcessesByName("Acrobat.exe");//找到pdf进城 你这么写是其中的一种PDF软件。有很多PDF软件的,你这个是adobe公司的,我用的就不是。
      

  8.   

    没关闭是一定不允许删除的
    而想打开的话可以Copy一份来打开
      

  9.   

    我想问各位兄弟的就是,为什么会触发private void process_Exited(object sender, EventArgs e) 这个方法。没有理由去触发这个方法的。
    当前的应用程序没有退出啊。