如何解决System.Unauthorized访问异常?

时间:2011-11-04 04:59:51

标签: c# exception

我已为应用程序添加更新程序(Myapp.exe)。当我启动 Myapp.exe 时,它会检查新的可用版本并根据用户说明将其下载到 Windows Temp目录。将更新下载到Temp目录后,新程序 replacer.exe 运行,负责获取 Myapp.exe ,终止其进程,删除 Myapp.exe < / strong>并将(Myapp.exe)的新版本从Temp目录复制到Myapp.exe旧路径。 replacer.exe 包含以下代码。

class Program
    {
        static void Main(string[] args)
        {
            try
            {                       
                Process myProcess = Process.GetProcessesByName("Myapp")[0];    
                myProcess.Kill();
                File.Delete(args[0]);
                File.Copy(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData) + "\\Temp\\Myapp.exe", args[0], false);

            }
            catch (Exception e)
            {
                Console.Write(e.ToString() + "");
                //return;
            }               
            //Console.Write( "Success");
            try
            {
                Process.Start(args[0]);
            }
            catch (Exception es) 
            {
                Console.Write(es.ToString() + "");
                //return;
            }
            Console.ReadLine();
        }
    }

但replacer.exe无法删除Myapp.exe并提供异常 System.UnauthorizedAccessException 。这意味着replacer.exe在删除Myapp.exe时无法访问Myapp.exe给出的路径 注意:我还以管理员和普通用户身份运行UserAccount,Myapp.exe和replacer.exe。 我该如何解决呢。请帮我。 提前致谢。 。

2 个答案:

答案 0 :(得分:3)

流程结束需要一段时间:Process.Kill()告诉流程停止,但不希望它真正完成。

您需要引入一个具有短延迟的循环并检查该进程是否实际终止。

使用属性Process.HasExited进行检查:MSDN上的文档:http://msdn.microsoft.com/en-us/library/system.diagnostics.process.hasexited.aspx

答案 1 :(得分:1)

您是否真的检查了args[0]的内容? File.Delete如果缺少必要的权限,则不会抛出UnauthorizedAccessException;如果路径指向目录或只读文件,也可以抛出它。