업데이터가 내장 된 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를 다시 시작할 수있는 확실한 방법이 있습니까?
감사
악성 코드 방지 프로그램을 사용하면 항상 편두통을 줄 수 있습니다. 겉으로는 어디에도없는 실행 파일을 결코 좋아하지 않습니다. wonkier 사람은 아직 거기에없는 것처럼 보이게, 스캔 그들의 즐거운 시간이 걸릴 것입니다. 그러나 .bak 파일을 실행할 수있는 이유를 쉽게 설명 할 수 없습니다.사용자 계정이 설치 디렉토리에서 파일의 이름을 바꾸거나 만들 수있는 충분한 권한이없는 경우를 포함하여 이러한 작업 중 하나가 실패 할 때마다 큰 소리로 큰소리로 말해야합니다. 정상적인 경우 * UAC는 c : \ program 파일을 보호합니다. –
** foo.exe ** 파일에서'Process.Start()'를 사용하고 나서 (지금) ** foo.exe.bak ** 파일에서 간단히 종료 했습니까? 근본적으로 다시 시작하는 것을 피하십시오. 또한 가능한 경우 ClickOnce에 대한 작업 일 수 있습니다. –
한스 : 장치에 문제가 있습니다. 소프트웨어를 테스트하는 동안 c : \ foo에 있습니다. 전통적으로 설치되지 않았습니다. 성공적으로 파일의 이름을 바꾸고 새 DLL을 해당 폴더에 다운로드하고 새 실행 파일을 다운로드합니다. 그것이 권리 문제라면, 나는 또한 그것들이 실패 할 것을 기대할 것입니다. 어떤 맬웨어 방지 상호 작용을 살펴볼 것입니다. 내 첫 번째 생각은 Application.Restart()가 실행중인 정확한 내용을 다시로드했을 수도 있지만 두 번째 호출에서 동작하는 것을 설명하지는 못합니다. 확실히 계속 진행해야합니다. 감사합니다. –