Как разрешить System.Исключение несанкционированного доступа?

#c# #exception

#c# #исключение

Вопрос:

У меня есть add updater для приложения (Myapp.exe ). Когда я запускаю Myapp.exe затем он проверяет новую доступную версию и загружает ее в соответствии с инструкциями пользователя во временный каталог Windows. После загрузки обновления во временный каталог новая программа replacer.exe запуски, которые отвечают за получение Myapp.exe , убить его процесс, удалить Myapp.exe и скопировать новую версию (из Myapp.exe ) из временного каталога в Myapp.exe старая тропа. The 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 и дайте систему исключений.Исключение UnauthorizedAccessException. Это означает, что replacer.exe не удается получить доступ к пути, указанному Myapp.exe при удалении Myapp.exe
Примечание: я запустил UserAccount, Myapp.exe и replacer.exe как администратор, так и обычный пользователь.
Как я могу это разрешить. Пожалуйста, помогите мне.
Заранее спасибо . . .

Комментарии:

1. В содержимом аргументов [0] нет проблем и Myapp.exe не только для чтения.

Ответ №1:

Для завершения процесса требуется некоторое время: Process.Kill() просто указывает процессу на остановку, но не хочет, чтобы он действительно заканчивался.

Вы захотите ввести цикл с небольшой задержкой и проверить, действительно ли процесс завершен.

Используйте свойство Process.HasExited , чтобы проверить это: документация по MSDN здесь: http://msdn.microsoft.com/en-us/library/system.diagnostics.process.hasexited.aspx .

Ответ №2:

Вы действительно проверили содержимое args[0] ? File.Delete не просто выдает UnauthorizedAccessException , если ему не хватает необходимых разрешений; он также может быть выдан, если путь ведет к каталогу или файлу, доступному только для чтения.