我設置上次運行安裝程序的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
。
我試過一堆東西在這裏,但無論我不能讓TARGETDIR
也INSTALLDIR
更改。
不幸的是,沒有幫助,它仍然想要安裝在同一個地方。 – user1006720