2017-11-02 14 views
1

VS2015에서 소프트웨어를위한 msi 프로젝트를 만들었습니다. 나는 넷 기반 데스크탑 응용 프로그램을 만들었습니다. 내 요구 사항은 2 가지 경우를 다루고 싶습니다. -msi 파일에 새 버전을 설치하는 동안 자동으로 제거하는 방법

1- 소프트웨어가 이미 설치되어 있고 사용자가 설치하려고하면 자동으로 기존 소프트웨어를 제거하고 데이터베이스 파일 (my 신청).

2- 설치된 버전이 낮 으면 응용 프로그램을 제거하고 데이터베이스 파일을 그대로 두어야합니다.

내 설치 프로젝트에서 설치 및 제거를위한 사용자 지정 작업을 추가했습니다. 여기서 내 dll 경로를 지정하고 Installer 클래스 속성을 true로 설정했습니다. 이 DLL에서 나는 System.Configuration.Install.Installer에서 상속하는 클래스를 만들었하고 아래와 같이 제거, beforeInstall을 설치 핸들 : - 지금 제거에

public partial class SetupManager : System.Configuration.Install.Installer 
    { 
     public SetupManager() 
     { 
      InitializeComponent(); 
      this.BeforeInstall += SetupManager_BeforeInstall; 
      //this.Committed += new InstallEventHandler(DarkMailInstaller_Committed); 
     } 

     private void SetupManager_BeforeInstall(object sender, InstallEventArgs e) 
     { 
      MessageBox.Show("In Install event"); 
     } 
} 

, 내가 DB를 삭제합니다. 제어판에서 설치를 제거하고 내 DB 파일도 제거하면 제대로 작동합니다.

하지만 재정의 기능을 사용하기 전에 제품을 업그레이드하고 싶습니다. 설치 또는 BeforeInstall과 마찬가지로 "이 제품의 다른 버전이 이미 설치되어 있습니다.이 버전의 설치를 계속할 수 없습니다. 구성하거나 제거하려면 제품의 기존 버전, 제어판의 프로그램 추가/제거 "를 사용하십시오.

이제 인터넷에서 검색 한 결과 패키지 코드 또는 제품 버전을 업데이트하면 설치가 가능해 보입니다. 이제 다음과 같은 문제가 있습니다 : -

1- VS 2015에서 설치 프로젝트에서 제품 버전 또는 패키지 코드를 설정할 수있는 속성이 없습니다.

2 나는 Orca를 사용하여 편집하려고했지만 편집 된 MSI 파일 (업데이트 된 버전 번호, 패키지 코드 및 제품 코드 포함)을 설치하려고해도 동일한 오류가 발생합니다.

3 설치 전 이벤트를 실행하기 전에 왜이 오류가 발생하는지 알지 못합니다.

4 "RemoveExistingProducts"가이 경우 도움이 될 것으로 나타났습니다. 하지만 VS2015에서이 속성/동작을 찾을 수 없습니다. 어디에서 찾을 수 있습니까?

일부 문제는이 문제를 해결할 수 있습니까? 비주얼 스튜디오 설치 프로젝트에서

답변

0

는 변경 사항을 적용, 제조와 같은 다른 속성, 버전 등

  1. 증가 설치 버전의 프로젝트 버전에서 설치 프로젝트의 RemovePreviousVersions 속성입니다.
  2. RemovePreviousVersions를 true로 설정하십시오.
  3. UpgradeCode가 동일해야하므로 변경하지 마십시오.
  4. 업데이트해야 할 바이너리의 파일 버전을 증가시킵니다.

솔루션 탐색기에서 설치 프로젝트를 선택하고 F4 키를 누르면 관련 속성이 표시됩니다.

Visual Studio는 모든 빌드와 함께 새 빌드를 작성하기 때문에 PackageCode에 대해 걱정하지 마십시오.

Visual Studio 사용자 지정 작업은 모두 파일이 설치된 후에 실행됩니다 ("이전"이름에도 불구하고). 따라서 설치 과정에 영향을 줄 수있는 방법은 없습니다. 어쨌든 당신은 그 (것)들을 필요로하지 않는다.

새로운 고객에게 새로 설치하는 MSI가 있습니다. 또한 이전 제품이 설치 될 때 업그레이드 할 것이고 Windows Installer 덮어 쓰기 규칙은 응용 프로그램에서 업데이트 한 데이터 파일이 대체되지 않는다는 것을 의미합니다.

https://msdn.microsoft.com/en-us/library/windows/desktop/aa370531(v=vs.85).aspx

생성 된 MSI는 설치의 끝으로 RemoveExistingProducts 서열을 가질 것이다. 기본적으로 PackageCodes의 내부에 대해 걱정할 필요가 없습니다. Visual Studio가이를 숨기므로.

+0

답변 해 주셔서 감사합니다. 그것은 나를 위해 작동합니다. 충분한 자격 증명이 없지만 +1은 분명합니다. – bulunga