【问题标题】:How to resolve System.Unauthorized access exception?如何解决 System.Unauthorized 访问异常?
【发布时间】:2011-11-04 04:59:50
【问题描述】:

我为应用程序 (Myapp.exe) 添加了更新程序。当我启动 Myapp.exe 时,它会检查新的可用版本并根据用户说明将其下载到 Windows Temp 目录。将更新下载到 Temp 目录后,新程序 replacer.exe 运行,该程序负责获取 Myapp.exe,杀死其进程,删除 Myapp.exe 并将新版本(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。 我该如何解决。请帮我。 提前致谢。 . .

【问题讨论】:

  • args[0]内容没有问题,Myapp.exe不是只读的。

标签: c# exception


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-10-08
      • 2021-03-14
      • 2019-10-10
      • 2021-02-23
      • 2017-09-15
      • 2017-09-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多