2012-01-16 8 views
2

ユーザ定義のパスにインストールを行ったときに、wixベースのインストーラをアンインストールしたり、デフォルトディレクトリ以外のディレクトリにアプリケーションをアップグレードしたりします。wix 3.5ユーザ指定のディレクトリからのアンインストール/アップグレード

私はここhttp://wix.tramontana.co.hu/tutorial/getting-started/where-to-install述べたステップを追ってきたし、これは

<Upgrade Id="{UPGRRADE-GUID}"> 
    <UpgradeVersion Minimum="$(var.ProductVersion)" Property="NEWERPRODUCTFOUND" OnlyDetect="yes" IncludeMinimum="yes" /> 
    <UpgradeVersion Minimum="0.0.0" Maximum="$(var.ProductVersion)" Property="PREVIOUSVERSIONSINSTALLED" IncludeMinimum="yes" /> 
</Upgrade> 


<Directory Id="TARGETDIR" Name="SourceDir"> 
    <Directory Id="$(var.programDir)"> 
    <Directory Id="INSTALLDIR" Name="$(var.InstallDir)"/> 
    </Directory> 
</Directory> 

<!-- Find previous installation --> 
<Property Id="INSTALLDIR"> 
<RegistrySearch Id="FindInstallLocation" 
    Root="HKLM" 
    Key="Software\Microsoft\Windows\CurrentVersion\Uninstall\[PREVIOUSVERSIONSINSTALLED]" 
    Name="InstallLocation" 
    Type="raw" /> 
</Property> 


<InstallExecuteSequence> 
    <FindRelatedProducts Before="LaunchConditions"/> 
    <AppSearch After="FindRelatedProducts"/> 
    <RemoveExistingProducts Before="InstallInitialize" /> 
</InstallExecuteSequence> 

私の機能は、私はARPINSTALLLOCATIONを設定

<DirectoryRef Id="INSTALLDIR"> 
     <Directory Id="Feature1.Dir" Name="$(var.AddInName)"> 
     <Component Id = "Addin" Guid="COMP-GUID"> 
    </Directory> 
</DirectoryRef> 


<Feature Id="FeatureOne" Level="1" ConfigurableDirectory="INSTALLDIR" Title="$(var.ServiceDisplayName)" Description="$(var.ServiceDescription)" Absent="allow"> 
<ComponentRef Id="AddIn"/> 
</Feature> 

次のコードを使用してプロパティにアクセスするには、メインProduct.wxsに今私のWiXのコードですアップグレードについてのmindcapers wikiのプロパティ。

問題:アンインストールとアップグレードの間、INSTALLDIR C:¥Program Files¥Myアプリケーションのデフォルトパスが引き続き選択されます。ログを見ると、INSTALLDIRがCostfinalizeのデフォルトパスに設定されていますが、Feature1.Dirは実際のアンインストールパスであるレジストリパスに設定されています。

この場合、誰かが何をすべきか提案できますか?レジストリプロパティが実際に設定されているappsearchではなく、costfinalizeの後でカスタムアクションを実行する必要がありますか?

よろしく、 ラジは

+0

私はコマンドラインでINSTALLDIRを渡すとアンインストールが正常に動作します。 – rui

答えて

2

あなたは、レジストリの元のインストール場所が保存されている必要があります。その後、アップグレードするときに、この値をレジストリからINSTALLDIRプロパティに読み込みます。

これは、コマンドラインでINSTALLDIRを設定するのと同じ効果があります。

単純なの方法で以前のバージョンがインストールされた場所を検出する方法はありません。 (私はそれが決定することは不可能ではないと言っていません)

関連する問題