Bootstrapper : 단일 .msi 패키지에서 응용 프로그램 및 전제 조건을 컴파일하는 방법은 무엇입니까?

StackOverflow https://stackoverflow.com/questions/567592

문제

설치 전제 조건이있는 응용 프로그램 용 .MSI 패키지를 작성하고 있습니다. 이 작업을 위해 Visual Studio 2005 부트 스트랩을 사용하고 있습니다. 이를 위해 다음을 수행했습니다. 폴더 C : Program Files Microsoft Visual Studio 8 SDK v2.0 bootstrapper Packages 는 전제 조건을위한 폴더를 만들었습니다 ( 'dotnetfx'와 동일한 구조를 만들었습니다). ; 'product.xml'및 'package.xml'을 만들어 적절하게 배치했습니다. 설치를 테스트하기 위해 지금까지 XML 파일을 매우 간단하게 유지했습니다.

Product.xml

<?xml version="1.0" encoding="utf-8"?>
<Product ProductCode="MyPrereq" xmlns="http://schemas.microsoft.com/developer/2004/01/bootstrapper">
  <PackageFiles CopyAllPackageFiles="false">
    <PackageFile Name="MyPrereq.exe" />
  </PackageFiles>
  <InstallChecks>
  </InstallChecks>
  <Commands Reboot="None">
    <Command PackageFile="MyPrereq.exe" EstimatedInstallSeconds="90">
      <InstallConditions>
      </InstallConditions>
      <ExitCodes>
    <ExitCode Value="0" Result="Success"/>
        <DefaultExitCode Result="Fail" String="GeneralFailure" FormatMessageFromSystem="true" />
      </ExitCodes>
    </Command>
  </Commands>
</Product>

package.xml

<?xml version="1.0" encoding="utf-8"?>
<Package Name="MyPrereq" Culture="Culture" xmlns="http://schemas.microsoft.com/developer/2004/01/bootstrapper">
  <Strings>
    <String Name="Culture">en</String>
    <String Name="DisplayName">MyPrereq</String>
    <String Name="GeneralFailure">A fatal error occurred. The installation failed.</String>
  </Strings>
</Package>

이제 목록에서 전제 조건을 추가하고 설정 프로젝트를 구축 할 수 있습니다.

문제 :

빌드 출력은 'setup.exe', 'myapp.msi'패키지, 'myprereq.exe'를 포함하는 'myprereq'라는 서브 폴더입니다.

빌드에서 'setup.exe'와 단일 'myapp.msi'를 만들고 싶습니다. 여기에는 추가 파일/디렉토리가없는 'myprereq'내부가 포함되어 있습니다.

.NET 프레임 워크가 내 앱의 또 다른 전제 q이며 동일한 .msi에 포함되어 있으므로 어떻게 든 가능해야합니다.

이것을 어떻게 달성 할 수 있습니까?

도움이 되었습니까?

해결책

단일 실행 파일에 모든 파일이 포함 된 IEXPRESS (Windows와 함께 제공)와 같은 도구를 사용하여 자체 추출 설치 프로그램을 만들 수 있습니다 ( 이렇게 게시).

MSI 파일이 자체 전제 조건을 설치할 수 없습니다. 첫째, Windows Installer 자체는 사전 반품 (및 비 MSI exe에 의해 설치되어야 함)이고 두 번째는 Windows Installer 설치가 트랜잭션이고 MSI 파일의 사슬 실행을 지원하지 않기 때문에 두 번째. 이는 기본적으로 하나의 MSI 설치가 다른 MSI 설치를 시작할 수 없음을 의미합니다. 결과적으로, 모든 사전 반품은 별도의 부트 스트랩퍼로 설치해야합니다 (그런데, 설치는 더 이상 트랜잭션이 아닙니다. MSI 설치가 실패하면 사전 반품이 제거되지 않습니다).

그러나 부트 스트랩 메커니즘에 대한 기본적인 잘못 이해가있는 것 같습니다. 부트 스트랩퍼는 현재 Visual Studio 또는 MSBuild에서만 생성 할 수 있습니다. afaik Wix에서는 불가능합니다. MSBuild에서 GenerateBootStrapper 작업을 찾으십시오 (참조 이렇게 게시).

다른 팁

나는 IEXPRESS로 그렇게 할 수있었습니다.

그러나 여기에 설명 된 작은 트릭을 사용해야했습니다.vs 쉘 응용 프로그램을위한 부트 스트랩퍼 만들기

불행히도 MSBuild 작업은 구성 리소스를 사용하여 대상 디렉토리에있는 전제 조건 설치자를 사용하는 옵션을 제공하지 않으므로 적절한 리소스 파일을 수동으로 업데이트하여 하위 지시 사항에서 전제 조건을 찾는 하드 코드 경로를 제거해야합니다. 같은 이름의.

  • Visual Studio의 리소스 편집기에서 Setup.exe 프로그램을 엽니 다.
  • 41 폴더에서 명명 된 리소스, setupcfg를 두 번 클릭하십시오.
  • "vs shell "문자열을 검색하고 나타나는 두 가지 발생을 삭제하십시오.
  • 리소스 파일을 저장하면 setup.exe 실행 파일이 자동으로 업데이트됩니다.
  • IEXPRESS를 실행하십시오
  • IEXPRESS Wizard의 단계에 따라 새 패키지를 만들고 다음 파일을 포함하십시오.
  • myvsShellApplication.msi 파일
  • setup.exe bootstrapper 파일
  • vs_shell_isolated.enu.exe 파일

  • 문제는 Bootstrapper가 전제 조건을 하위 폴더에 넣고 IEXPRESS는 하위 폴더를 인식하지 못한다는 것입니다. 'setup.exe'를 편집하는 동안 조심해야합니다. 첫 번째 시도에서는 정확하지 않았습니다.

    라이센스 : CC-BY-SA ~와 함께 속성
    제휴하지 않습니다 StackOverflow
    scroll top