2009-12-03 3 views
1

기존 제품의 설치 프로그램을 작성하고 있습니다. 이전 설치 프로그램이 NSIS (Nullsoft Scriptable Install System)으로 작성되었습니다. WiX을 사용하여이 제품의 msi 기반 설치 프로그램을 작성해야합니다. 나는 이것에 관해서 어떤 질문을 가지고있다. -WiX를 사용하여 업그레이드 가능한 msi 패키지 작성

  1. 내 응용 프로그램이 대상 컴퓨터에 설치되어 있는지 여부를 감지하는 방법은 무엇입니까? 응용 프로그램은 NSIS (이전 버전) 또는 MSI (지금 이후 버전)를 사용하여 설치되었을 수 있습니다.
  2. 대상 컴퓨터에 이전 버전 또는 동일한 버전의 제품이 설치되어있는 경우 업그레이드 할 수있는 WiX 설치 프로그램을 작성하는 방법. 여러 사이트에서이 주제가 발견되었지만 작동하지 않습니다. 특히 소프트웨어의 각 릴리스에서 설치 프로그램 코드베이스에서 어떤 정보 (GUID, 버전 등)를 변경해야하는지 알고 싶습니다.
  3. 매년 3/4 버전의 제품이 출시됩니다. 어떤 설치 프로그램이 나에게 가장 적합할까요?

윅스 코드에서 제품 요소의 버전 만 변경하면 최신 설치 프로그램이 이전 버전을 대체 할 수 없습니다. 최신 버전의 설치 프로그램을 두 번 클릭하면 오류 대화 상자가 표시됩니다.

이 제품의 다른 버전은 이미 설치되어 있습니다. 이 버전의 설치 "를 구성하거나 추가/사용 제어판에서 프로그램 제거,이 제품의 기존 버전을 제거 continue.To 수 없습니다

샘플 코드 :.

<?xml version='1.0' encoding='windows-1252'?> 
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi" 
    xmlns:util="http://schemas.microsoft.com/wix/UtilExtension" > 
    <Product Name='Baton' Id='41B8F929-B6CF-41BE-9E40-C96D9BD6D672' 
     UpgradeCode='E1F03FA4-D470-4FA6-86BA-F5CDD3007C1D' 
     Language='1033' Codepage='1252' Version='1.0.0' Manufacturer='Company Name.'> 

     <Package Id='*' Keywords='Installer' Description="product Installer" 
      Comments='product comments' 
      InstallerVersion='100' Languages='1033' Compressed='yes' 
      SummaryCodepage='1252' /> 

     <Upgrade Id='E1F03FA4-D470-4FA6-86BA-F5CDD3007C1D'> 
      <UpgradeVersion OnlyDetect='no' Property='PREVIOUSFOUND' Minimum='1.0.0' 
       IncludeMinimum='yes' Maximum='1.1.0' IncludeMaximum='yes' /> 
     </Upgrade> 

     <!-- ***Install execution sequence*** --> 
     <InstallExecuteSequence> 
      <RemoveExistingProducts After="InstallInitialize"/> 
+0

다음 번에 특정 문제에 집중하시기 바랍니다. 3 개 또는 4 개의 준 관련 질문 모음에 대해 일관된 답변을 작성하기 란 쉽지 않습니다. 나는 지금 막 대답했다 (나는 생각한다) 주요 질문이다. –

답변

2

또 다른 버전의 이 제품은 입니다.이 버전의 설치를 계속하려면 을 설치하십시오. 을 설치하거나 제거하려면이 제어판의 프로그램 추가/제거를 사용하십시오.

동일한 제품 ID로 설치 프로그램을 다시 빌드 한 다음 다시 실행하면 오류가 발생합니다. 이를 방지하려면 제품 요소 ID를 Id="*"으로 설정하십시오.

주요 업그레이드는 this answer과 같이 구현할 수 있습니다. 사전 처리기 변수를 사용하여 Product 요소와 UpgradeVersion 요소간에 버전을 일관되게 유지한다는 점을 제외하면 예제 코드와 거의 같습니다. 또한 다운 그레이드를 방지합니다.