2008-09-28 3 views
4

이전 버전의 앱을 종료하는 경우이를 업그레이드하는 설치가 있습니다. 설치가 업그레이드 모드 일 때 특정 동작을 건너 뛰고 싶습니다. 설치가 업그레이드 모드와 처음 설치 모드에서 실행 중인지 어떻게 확인할 수 있습니까?Windows Installer가 처음 설치하는 대신 업그레이드를 수행하고 있음을 어떻게 확인할 수 있습니까?

와이즈 설치 프로그램을 사용하고 있지만 중요하지 않다고 생각합니다. Windows Installer에 설치 관리자가 업그레이드 모드 일 때 설정된 속성이 있다고 가정합니다. 나는 그것을 찾을 수없는 것 같습니다. 속성이 있으면 조건문에서 사용할 수 있다고 가정합니다.

답변

-1

귀하의 질문을 이해하지 못했습니다.
설치 스크립트를 직접 작성하는 경우 Windows에서 가장 좋은 방법은 일반적으로 프로그램에서 생성하는 레지스트리 키를 확인하는 것입니다. 설치 디렉토리 (및 시작 메뉴 항목 등)와는 달리 그것은 불변입니다. 이러한 키 중 하나는 소프트웨어의 버전 번호 일 수도 있습니다. 사용자가 이전 버전을 설치하려고하거나 (예 : 일부 파일을 제거해야하는지 등을 확인하려는 경우) 확인할 수 있습니다.

2

이 설치 프로그램을 만들 때 어떤 도구를 사용하고 계신가요?

Windows Installer XML (WIX)을 사용합니다. 업그레이드 옵션을

<!-- Property definitions --> 
    <?define SkuName = "MyCoolApp"?> 
    <?define ProductName="My Cool Application"?> 
    <?define Manufacturer="Acme Inc."?> 
    <?define Copyright="Copyright © Acme Inc. All rights reserved."?> 
    <?define ProductVersion="1.1.0.0"?> 
    <?define RTMProductVersion="1.0.0.0" ?> 
    <?define UpgradeCode="{EF9D543D-9BDA-47F9-A6B4-D1845A2EBD49}"?> 
    <?define ProductCode="{27EA5747-9CE3-3F83-96C3-B2F5212CD1A6}"?> 
    <?define Language="1033"?> 
    <?define CodePage="1252"?> 
    <?define InstallerVersion="200"?> 

을 그리고 정의 : WIX에서 당신이 뭔가를 할 수

<Upgrade Id="$(var.UpgradeCode)"> 
     <UpgradeVersion Minimum="$(var.ProductVersion)" 
       IncludeMinimum="no" 
       OnlyDetect="yes" 
       Language="$(var.Language)" 
       Property="NEWPRODUCTFOUND" /> 

     <UpgradeVersion Minimum="$(var.RTMProductVersion)" 
       IncludeMinimum="yes" 
       Maximum="$(var.ProductVersion)" 
       IgnoreRemoveFailure="no" 
       IncludeMaximum="no" 
       Language="$(var.Language)" 
       Property="OLDIEFOUND" /> 

</Upgrade> 

을 당신이 원하는 것을 그리고 더 당신이에 따라 OLDIEFOUNDNEWPRODUCTFOUND 속성을 사용할 수 있습니다

<!-- Define custom actions --> 
<CustomAction Id="ActivateProduct" 
      Directory='MyCoolAppFolder' 
      ExeCommand='"[MyCoolAppFolder]activateme.exe"' 
      Return='asyncNoWait' 
     Execute='deferred'/> 

<CustomAction Id="NoUpgrade4U" 
      Error="A newer version of MyCoolApp is already installed."/> 

위에서 정의한 동작은 다음과 같이 정의해야합니다. InstallExcecuteSequence

<InstallExecuteSequence> 
    <Custom Action="NoUpgrade4U" 
     After="FindRelatedProducts">NEWPRODUCTFOUND</Custom> 
    <Custom Action="ActivateProduct" 
     OnExit='success'>NOT OLDIEFOUND</Custom> 
</InstallExecuteSequence> 
1

Installed이라는 MSI 속성이 있습니다.이 제품은 컴퓨터 당 또는 현재 사용자 용으로 설치된 경우 true입니다. 조건부 부울 문에서 사용할 수 있습니다.

다른 MSI 설치 상태 properties 중 하나가 더 잘 작동 할 경우를 대비하여 확인할 수도 있습니다. Wise는 사용한 적이 없지만 이러한 속성을 검색 할 수있는 방법이 있다고 가정합니다.