2015-11-26 36 views
0

我已经使用wix创建了一个msi文件,该文件允许用户选择目标目录。安装是正确的。通过用户交互(msi安装程序)更改INSTALLDIR

当用户选择非默认目标目录时,卸载不会删除所有文件。我不使用WixUI_InstallDir。

<Directory Id="TARGETDIR" Name="SourceDir"> 
      <Directory Id="ProgramFilesFolder" Name="PEFiles"> 
       <Directory Id="Company" Name="My Company"> 
        <Directory Id="INSTALLDIR" Name="My Product Default"> 
         <Directory Id="DOC" Name="Doc"> 


<Dialog Id="BrowseDlg" Width="370" Height="270" Title="[ProductName] [Setup]" NoMinimize="yes"> 
    <Control Id="PathEdit" Type="PathEdit" X="84" Y="202" Width="261" Height="18" Property="_BrowseProperty" Indirect="yes" /> 
    <Control Id="OK" Type="PushButton" X="304" Y="243" Width="56" Height="17" Default="yes" Text="[ButtonText_OK]"> 
     <Publish Event="SetTargetPath" Value="[_BrowseProperty]">1</Publish> 
     <Publish Event="EndDialog" Value="Return">1</Publish> 
    </Control> 
</Dialog> 

InstallLog:

MSI (c) (38:44) [10:03:19:521]: PROPERTY CHANGE: Adding INSTALLDIR property. Its value is 'C:\Program Files\My Company\My Product Default\'. 
MSI (c) (38:3C) [10:03:27:680]: PROPERTY CHANGE: Adding _BrowseProperty property. Its value is 'INSTALLDIR'. 
Action 10:03:27: BrowseDlg. Dialog created 
MSI (c) (38:3C) [10:03:39:099]: PROPERTY CHANGE: Modifying INSTALLDIR property. Its current value is 'C:\Program Files\My Company\My Product Default\'. Its new value: 'C:\Program Files\My Company\My folder\'. 
MSI (c) (38:3C) [10:03:39:209]: PROPERTY CHANGE: Modifying DOC property. Its current value is 'C:\Program Files\My Company\My Product Default\Doc\'. Its new value: 'C:\Program Files\My Company\My folder\Doc\'. 
... 

UninstallLog:安装

MSI (s) (48:6C) [10:22:34:485]: PROPERTY CHANGE: Adding INSTALLDIR property. Its value is 'C:\Program Files\My Company\My Product Default\'. 
MSI (s) (48:6C) [10:22:34:485]: PROPERTY CHANGE: Adding DOC property. Its value is 'C:\Program Files\My Company\My Product Default\Doc\'. 

其它组分/常卸载。在卸载过程中,某些组件的路径被设置为默认路径而不是用户选择的路径。

我该如何解决卸载问题?

编辑: 我使用WIX 3.5.2519.0。

回答

0

假设您在卸载期间不使用该对话框,则安装期间选择的值不会被安装程序保存在任何位置。这意味着在卸载它使用所有的默认值。

解决此问题的一种方法是在安装过程中将用户选择保存在注册表项中,然后在卸载过程中读取该密钥。