2017-05-10 5 views
1

업데이터가 내장 된 foo.exe 응용 프로그램이 있습니다. 서버에 연결하고 업데이트가있는 경우 현재 (실행중인) 응용 프로그램의 이름을 foo.exe.bak로 변경하고 foo.exe를 다운로드 한 후 Application.Restart으로 호출하여 새 버전 인 foo.exe를 시작합니다. 이것은 작동하는 것처럼 보입니다 ... 대부분의 시간. 한 컴퓨터는 항상 작동하는 것처럼 보이고 다른 컴퓨터는 간혹 새 버전을 가져 오지만 이전 버전을로드합니다. Application.Restart을 호출하는 단추를 통해 응용 프로그램을 다시 시작하면 올바른 버전이 나타납니다.VB.NET Application.Restart behavior - 예기치 않은 결과

이 재시작 실패 기간 동안 로컬 시스템의 파일은 1.2이고 서버는 1.2이지만 실행중인 버전은 방금 업데이트 한 1.1입니다. 업데이터가 DLL 업데이트와 현재 실행 가능한 버전을 검사 할 수 있도록 최근 수정되었으므로 현재 예상되는 버전과 달리 실행중인 응용 프로그램 (1.1)의 버전이 아니라 exe 파일 (1.2)의 버전을 확인하고 있습니다. 버전 불일치로 인해 다른 업데이트가 실행되지 않습니다. 궁극적으로 이는 내 응용 프로그램이 현재 업데이트 된 버전이라고 판단되는 잘못된 쪽 오류가 있음을 의미합니다.

재시작을 호출하기 전에 1 초의 지연이있었습니다. 이 값을 5로 올리면 문제를 해결하는 데 아무런 효과가 없습니다. Application.Restart의 작동 방식과 관련하여 누락 된 것이 있습니까? 나는 Shell(Application.ExecutablePath)Application.Exit을 시도했지만 작동하지 않았습니다. 응용 프로그램이 종료되었습니다. 내 응용 프로그램을 닫고 foo.exe를 다시 시작할 수있는 확실한 방법이 있습니까?

감사

+0

악성 코드 방지 프로그램을 사용하면 항상 편두통을 줄 수 있습니다. 겉으로는 어디에도없는 실행 파일을 결코 좋아하지 않습니다. wonkier 사람은 아직 거기에없는 것처럼 보이게, 스캔 그들의 즐거운 시간이 걸릴 것입니다. 그러나 .bak 파일을 실행할 수있는 이유를 쉽게 설명 할 수 없습니다.사용자 계정이 설치 디렉토리에서 파일의 이름을 바꾸거나 만들 수있는 충분한 권한이없는 경우를 포함하여 이러한 작업 중 하나가 실패 할 때마다 큰 소리로 큰소리로 말해야합니다. 정상적인 경우 * UAC는 c : \ program 파일을 보호합니다. –

+0

** foo.exe ** 파일에서'Process.Start()'를 사용하고 나서 (지금) ** foo.exe.bak ** 파일에서 간단히 종료 했습니까? 근본적으로 다시 시작하는 것을 피하십시오. 또한 가능한 경우 ClickOnce에 대한 작업 일 수 있습니다. –

+0

한스 : 장치에 문제가 있습니다. 소프트웨어를 테스트하는 동안 c : \ foo에 있습니다. 전통적으로 설치되지 않았습니다. 성공적으로 파일의 이름을 바꾸고 새 DLL을 해당 폴더에 다운로드하고 새 실행 파일을 다운로드합니다. 그것이 권리 문제라면, 나는 또한 그것들이 실패 할 것을 기대할 것입니다. 어떤 맬웨어 방지 상호 작용을 살펴볼 것입니다. 내 첫 번째 생각은 Application.Restart()가 실행중인 정확한 내용을 다시로드했을 수도 있지만 두 번째 호출에서 동작하는 것을 설명하지는 못합니다. 확실히 계속 진행해야합니다. 감사합니다. –

답변

0

이 모든 후, 그것은 타이밍 문제였습니다. 응용 프로그램은 업데이트가 필요하지 않은 것처럼 시작하여 자체적으로 앞서 가고있었습니다. 그러면 업데이터가 "이봐, 업데이트!"라는 메시지를 다시 전달했습니다. 응용 프로그램이 이미 시작된 시간.

-1

는 현재 (실행) 응용 프로그램이 성취되어 기대하는 방법

을 foo.exe.bak하기 위해 이름을 변경? Windows는 현재 실행중인 프로그램 파일의 이름을 바꾸는 것을 허용하지 않습니다.

자동 업데이트를 수행하려는 대부분의 응용 프로그램에는 업데이트를 감지하고 종료 할 때 주 프로그램이 업데이트 프로그램을 시작하는 두 번째 "업데이트 프로그램"프로그램이 있습니다. 업데이트 프로그램은 주 프로그램이 종료 될 때까지 기다렸다가 업데이트가 필요한 항목을 업데이트하고 주 프로그램을 다시 시작한 다음 종료합니다.

또한 "업데이트"파일을 다운로드 한 다음 배치 파일의 이름을 바꾸고 프로그램을 다시 시작하기 전에 빠른 .bat 파일을 시작하는 것은 주 프로그램에서 담당합니다.

그러나 * .exe 파일이 계속 실행되는 동안 * .exe 파일을 업데이트하려고하면 이상한 결과가 발생합니다.

주목할 가치가있는 점은 Program Files 폴더가 기본적으로 표준 권한 사용자 계정에 대해 읽기 전용이라는 것입니다. 최종 사용자가이 폴더의 파일을 업데이트 할 수 있도록하려면 원본 설치 프로세스 중에 폴더의 기본 사용 권한을 변경해야합니다.

+2

허용합니다. MMF는 디렉터리 항목이 아닌 파일 데이터에만 잠금을 설정합니다. 게다가, 당신의 추측이 맞다면 그는 오래 전에 그것을 발견했을 것입니다. –

+0

실행중인 실행 파일에서 수행 할 수있는 몇 가지 작업 중 하나가 이름을 바꾼다는 사실에 놀랐습니다. –