#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
, если ему не хватает необходимых разрешений; он также может быть выдан, если путь ведет к каталогу или файлу, доступному только для чтения.