2012-09-25 43 views
0

我設置上次運行安裝程序的Windows註冊表中的一個值來設置安裝目錄時出現了很多問題。這將正確地默認路徑。這裏奇怪的是,我們總是讓用戶設置安裝路徑,即使是在升級時,如果它與上次安裝的文件夾不同,那麼我們不會執行RemoveExistingProducts以讓用戶運行多個版本的應用程序並排。現在如何從註冊表項設置TARGETDIR或INSTALLDIR?

,我一直在尋找解決的辦法網頁和我發現很多建議,但這些都不影響其實我INSTALLDIR,我可以在設置UI,我去選擇安裝看到。

這裏是我的時刻了:

<Property Id="PREVINSTALLDIR"> 
    <RegistrySearch Id="PrevInstallDir" 
        Root="HKCU" 
        Key="Software\MyCompany\MyApp" 
        Name="InstallDir" 
        Type="raw" /> 
</Property> 

<CustomAction Id="SetTargetDir" Property="TARGETDIR" 
       Value="[PREVINSTALLDIR]" 
       Execute="firstSequence" /> 

<InstallExecuteSequence> 
    <Custom Action="SetTargetDir" Before="CostFinalize"></Custom> 
    <RemoveExistingProducts After="InstallFinalize">PREVINSTALLDIR ~= INSTALLDIR</RemoveExistingProducts> 
</InstallExecuteSequence> 

誰能發現我在做什麼錯在這裏?

請注意,RemoveExistingProducts部分的工作原理是PREVINSTALLDIR已被讀取。在安裝日誌我也可以看到這一點:

Action start 13:50:27: AppSearch. 
AppSearch: Property: PREVINSTALLDIR, Signature: PrevInstallDir 
Action ended 13:50:27: AppSearch. Return value 1. 

當退出設置,性質傾入日誌文件,我看到:

Property(C): PREVINSTALLDIR = C:\Some\Path\MyApp 
Property(C): TARGETDIR = C:\ 
Property(C): MyAppDir = C:\ProgramData\Microsoft\Windows\Start Menu\Programs\MyApp\ 
Property(C): INSTALLDIR = C:\Program Files (x86)\MiTek\MyApp\ 

INSTALLDIR不會受到我的維克斯上面的腳本,TARGETDIR,我也會假設爲C:\Some\Path\MyApp

我試過一堆東西在這裏,但無論我不能讓TARGETDIRINSTALLDIR更改。

回答

1

您好我設法讓我INSTALLLOCATION改變使用此:

<SetDirectory Id="INSTALLLOCATION" Value="[$(var.PlatformProgramFilesFolder)]\[$(var.Manufacturer)]\[ProductName]" Sequence="both"></SetDirectory> 

Value必須是一個完整的path..hope這有助於.. :)

+0

不幸的是,沒有幫助,它仍然想要安裝在同一個地方。 – user1006720

3

這爲我工作:

<!-- Existing install path --> 
<Property Id="EXISTINGINSTALLDIR" Secure="yes"> 
    <RegistrySearch Id="Locate_EXISTINGINSTALLDIR" Root="HKCU" Key="Software\$(var.CompanyName)\$(var.ProductName)" Name="InstallDir" Type="directory" /> 
</Property> 

<!-- custom action specification --> 
<CustomAction Id="Set_INSTALLDIR" Execute="firstSequence" Property="INSTALLDIR" Value="[EXISTINGINSTALLDIR]" /> 

<InstallExecuteSequence> 
    <Custom Action="Set_INSTALLDIR" After="FileCost"><![CDATA[NOT Installed AND (NOT INSTALLDIR) AND EXISTINGINSTALLDIR]]></Custom> 
</InstallExecuteSequence> 

<InstallUISequence> 
    <Custom Action="Set_INSTALLDIR" After="FileCost"><![CDATA[NOT Installed AND (NOT INSTALLDIR) AND EXISTINGINSTALLDIR]]></Custom> 
</InstallUISequence>