Самостоятельно обновляемый вопрос приложения - PullRequest
4 голосов
/ 19 февраля 2010

Я искал простой механизм самообновления исполняемых файлов. (Я не могу использовать Click-Once из-за характера приложения - поверьте мне)

Я заметил, что сборка в полете может перемещаться в другое место на диске, предположительно потому, что выполняющаяся сборка фактически является копией в памяти), и что исходное местоположение файла может быть перезаписано. Это доказывается с помощью следующего отрывочного примера ...

string assemblyStart = System.Reflection.Assembly.GetExecutingAssembly().Location;
Console.WriteLine(assemblyStart);

if(File.Exists(@"C:\ANewExe.exe")) 
{
    File.Delete(@"C:\ANewExe.exe");
}
File.Move(assemblyStart,@"C:\ANewExe.exe");
string assemblyMoved = System.Reflection.Assembly.GetExecutingAssembly().Location;
Console.WriteLine(assemblyMoved);  // still reports as the original location

File.WriteAllText(assemblyStart,"some text");

В моей системе разработки XP это приводит к перемещению файла сборки в c:\ANewExe.exe, а исходное местоположение файла заполняется текстом "некоторый текст".

Я предполагаю, что мой вопрос здесь заключается в том, является ли этот безопасный и / или надежный метод для использования в версиях Windows от XP и более), или есть другие способы достижения этой функциональности? Будет ли это обнаружено как возможное поведение вируса антивирусными системами, к которым у меня нет доступа для тестирования?

1011 * ТИА *

1 Ответ

6 голосов
/ 19 февраля 2010

Notepad ++ использует GUP - http://gup -w32.sourceforge.net / .Стоит посмотреть.

Является ли характер приложения таким, чтобы оно ДОЛЖНО оставаться работающим?Кажется, гораздо проще иметь программу обновления, загружающую новый EXE-файл, перезаписывать текущий и затем предлагать перезапустить приложение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...