2013-07-31 8 views
2

Wix 3.6을 사용하여 응용 프로그램의 모든 요소를 ​​성공적으로 설치하는 설치 프로그램을 개발했습니다.WiX에서 APP의 이전 버전을 제거하라는 메시지

이제 더 높은 버전으로 msi을 제공 할 때마다 설치 프로그램이 사용자에게 설치 제거 메시지를 표시하도록합니다. 지금부터 나는 이것을 시도했다 :

<Product 
Id="*" 
Name="!(loc.ProductName)" 
Language="3082" 
Codepage="1252" 
Version="1.0.1" 
Manufacturer="$(var.ProductManufacturer)" 
UpgradeCode="$(var.UpgradeCode)"> 

<Property Id="PREVIOUSVERSIONINSTALLED" Secure="yes" /> 
<Upgrade Id="$(var.UpgradeCode)"> 
    <UpgradeVersion Minimum="1.0.0.0" Maximum="99.9.9.9" IncludeMiminum="yes" IncludeMaximum="no" Property="PREVIOUSVERSIONSINSTALLED" /> 
</Upgrade> 

<InstallExecuteSequence> 
    <RemoveExistingProducts Before="InstallInitialize" /> 
</InstallExecuteSequence> 

이 코드는 내 컴퓨터에 설치된 모든 버전을 성공적으로 제거한다. 그러나 은 사용자에게 확실하지 않은지 묻지 않습니다.

설치하여 [ProductName]을 (를)의 이전 버전 : 내가 필요로 무엇

같은 메시지를 말하는 사용자에게 메시지를 표시 할 윅스 설치 프로그램입니다. 제거 하시겠습니까? [예 | 아니오] 옵션을 선택하십시오.

사용자에게 메시지를 보내고 그가 이전 버전을 정말로 제거하려고하는지 확인할 수있는 방법이 있습니까?

+0

사용자가 "아니오"를 클릭하면 어떻게됩니까? –

+0

WiX가이를 지원합니까? 개인적인 경험에 비추어 볼 때 설치 프로그램을 만드는 마이크로 소프트의 소프트웨어조차도 문제없이 올바른 방법을 만들었습니다. –

답변

2

Windows Installer 업그레이드 테이블에는 WiX의 UpgradeVersion @ OnlyDetect 특성으로 표시되는 msidbUpgradeAttributesOnlyDetect라는 특성 비트가 있습니다.

올바르게 작성되면 FindRelatedProducts가 감지 된 제품의 ProductCode GUID로 선택한 작업 속성을 설정합니다. 그러나 RemoveExistingProducts에 자동 제거를 위해 이것을 전달하지는 않습니다.

일반적인 동작은 아니지만이 속성에 값이있을 때 트리거되는 일부 UI 작성을 방해하는 것은 없습니다. 사용자에게 이전 버전을 제거 할 것인지 물어볼 수 있으며, 그렇다면 RemoveExistingProducts에 다른 작업 속성을 설정하십시오. (힌트 : 자신의 제품을 절대로 발견 할 수없는 업그레이드를 작성하고 제거를 삽입하는 속성을 납치하십시오.)

사용자가 아니오라고 말하면 설치를 중단하거나 설치를 계속 진행할 수 있습니다 다른 디렉토리 구조로. (Office, Visual Studio 외).

+0

크리스토퍼 감사합니다. 내 첫 번째 생각은 내 요구 사항에 맞는 수리/변경/제거 창을 대체하는 것이 었습니다 (귀하의 의견대로). 하지만 왜 응용 프로그램을 설치하고 새 버전을 설치하려고하면 패널 컨트롤에서 프로그램을 추가/제거 할 수 있는지 알 수 없습니다. 나를 위해, 그 선택이 최고의 하나 (사용자 정의 인터페이스를 만들 것입니다). – Sonhja

+0

솔루션으로 돌아 가기 : 설명하는 솔루션을 사용하는 방법을 좀 더 설명 할 수 있습니까? 나는 그것을 적용하는 방법에 분실. – Sonhja

+0

죄송합니다. StackOverflow에서만 질문에 답변 할 수 있습니다. 교육을 제공 할 수 없습니다. –

2

동일한 문제를 해결할 때 this post이 유용합니다. 업그레이드 태그에서 설정 한 PREVIOUSVERSIONINSTALLED 속성을 사용하여 사용자 지정 대화 상자를 열 수 있습니다. (표준 환영 대화 상자를 사용하는 경우)에 다음 코드를 추가하여 몇 가지 UI-태그 내부에이 작업을 수행 :

<Publish Dialog="WelcomeDlg" Control="Next" Event="NewDialog" Value="OldVersionDlg">PREVIOUSVERSIONSINSTALLED</Publish> 
<Publish Dialog="WelcomeDlg" Control="Next" Event="NewDialog" Value="SetupTypeDlg">NOT Installed AND NOT PREVIOUSVERSIONSINSTALLED</Publish> 

을 나는 this Wix tutorial에 내 자신의 사용자 정의 대화 상자를 기반으로, 다음과 같은 코드로 끝났다 :

<Dialog Id="OldVersionDlg" Width="260" Height="85" Title="[ProductName] Setup" NoMinimize="yes"> 
     <Control Id="No" Type="PushButton" X="132" Y="57" Width="56" Height="17" 
      Default="yes" Cancel="yes" Text="No"> 
      <Publish Event="EndDialog" Value="Exit">1</Publish> 
     </Control> 
     <Control Id="Yes" Type="PushButton" X="72" Y="57" Width="56" Height="17" Text="Yes"> 
      <Publish Event="EndDialog" Value="Return">1</Publish> 
     </Control> 
     <Control Id="Text" Type="Text" X="48" Y="15" Width="194" Height="30"> 
      <Text>A previous version of [ProductName] is currently installed. By continuing the installation this version will be uninstalled. Do you want to continue?</Text> 
     </Control> 
</Dialog> 
+0

게시물의 처음 두 줄에 대한 자세한 내용을 알려주십시오. 죄송합니다 내 영어에 대해 잘 모르겠지만 어디에 넣어 : 게시 대화 상자 = "WelcomeDlg"컨트롤 = "다음"이벤트 = "NewDialog"값 = "OldVersionDlg"> PREVIOUSVERSIONSINSTALLED – misshomme

+0

처음 두 줄에 배치해야합니다 UI를 설명하는 파일 필자는 WixUI_InstallDir.wxs라는 샘플을 기반으로하며, https://wix.codeplex.com/downloads/get/762939에서/src/ext/UiExtension/wxlib에 있습니다. 행은 기본적으로 PREVIOUSVERSIONINSTALLED가 설정된 경우 (내 경우, OldVersionDlg라는 사용자 정의 대화 상자 열기) 일어날 일을 설명합니다. – Chepe

+0

http://stackoverflow.com/questions/33690724/wix-custom-dialog-when-previous-version-exists를 참조하십시오. – misshomme