2010-02-19 3 views
4

나는 self-updating 실행 파일을위한 간단한 machanism을보고있다. (응용 프로그램의 특성으로 인해 Click-Once를 사용할 수 없습니다.)자동 업데이트 응용 프로그램 질문

실용적인 어셈블리가 디스크의 다른 위치로 이동할 수있는 것으로 나타났습니다. 이는 아마도 실행중인 어셈블리 실제로는 메모리 내 사본 임) 파일의 원래 위치를 덮어 쓸 수 있습니다. "이것은 내 XP 개발 시스템에

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"); 

... 다음 개념 증명 코드 조각으로 입증이 어셈블리 파일에 결과 c:\ANewExe.exe로 이동되고, 원본 파일의 위치는 텍스트 충만 어떤 텍스트 ".

내 질문에 짐작 하시겠지만, XP에서 Windows 버전간에 사용할 수있는 안전하고 신뢰할 수있는 방법입니까?) 또는이 기능을 구현하는 다른 방법이 있습니까? 이 바이러스는 내가 테스트 할 수있는 권한이없는 AV 시스템에서 가능한 바이러스 동작으로 탐지됩니까?

TIA

답변

6

메모장 ++ GUP를 사용 - http://gup-w32.sourceforge.net/. 한 번보기 가치.

실행 상태를 유지해야하는 응용 프로그램의 특성입니까? 업데이터가 새로운 EXE를 다운로드하고, 현재 EXE 파일을 덮어 쓰게 한 다음, 앱을 다시 시작하라는 메시지를 표시하는 것이 훨씬 쉽습니다.

+0

동의합니다. 앱을 계속 실행할 필요가 없으며 시스템을 지금까지 전용 업데이터 응용 프로그램을 호출하도록 만들었습니다. 실제로 우연히 업데 이터를 업데이트하도록 설정했을 때 나는 단지 bahaviour로만 설명했습니다. 파일 잠금 예외가 예상되었지만 모두 막 작동했습니다. 그 발견에 비추어 볼 때, 메인 시스템이 사물을 처리 할 수 ​​있다면 외부 앱을 호출하는 것이 과도하지 않은지 궁금합니다 ... – ZombieSheep

+1

외부 앱과 함께 갈 것입니다. 그것은 확실히 작동하고 계속 그렇게 할 것입니다. –

관련 문제