Wix卸载时删除appdata文件夹

devfunkd

我正在使用Wix 3.11,并尝试了多种不同的方法和方法,但似乎无法弄清楚Wix为什么不删除我的ApplicationDataFolder文件夹。在安装过程中,我在ApplicationDataFolder位置为用户创建文件夹

我的应用程序使用日志记录并将其与其他一些内容一起存储在目录中。在卸载过程中,将删除应用程序文件夹中的所有内容,但保留带有日志和其他文件的appdata文件夹。

我不知道为什么或缺少什么。

WXS模板

<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi" xmlns:util="http://schemas.microsoft.com/wix/UtilExtension">
  <Product Id="*" UpgradeCode="9e578e3d-0119-425c-8633-f54ffaaa4929" Name="@product.name@" Version="@product.version@" Manufacturer="@product.company@" Language="1033">
    <Package InstallerVersion="400" Compressed="yes" InstallScope="perMachine" Comments="@product.version@" Description="@product.description@"/>
    <Media Id="1" Cabinet="SomeApp.cab" EmbedCab="yes" />

    <!-- Installer Properties -->
    <Property Id="WIXUI_INSTALLDIR" Value="INSTALLDIR" />
    <PropertyRef Id="WIX_IS_NETFRAMEWORK_46_OR_LATER_INSTALLED"/>

    <!-- Installer Resources -->
    <Icon Id="ApplicationIcon" SourceFile="SomeApp 4\SomeApp 4_vista.ico"/>
    <Property Id="ARPPRODUCTICON" Value="ApplicationIcon" />

    <Property Id="INSTALLDIR">
        <RegistrySearch Key="SOFTWARE\Acme\SomeApp" 
                        Root="HKCU" Type="raw" 
                        Id="APPLICATIONFOLDER_REGSEARCH" Name="installation-path" />
    </Property>

    <WixVariable Id="WixUILicenseRtf" Value="SomeApp 4\license.rtf" />
    <WixVariable Id="WixUIBannerBmp" Value="WixUIBannerBmp.bmp" />
    <WixVariable Id="WixUIDialogBmp" Value="WixUIDialogBmp.bmp" />

    <!-- Check Existing Install -->
    <Upgrade Id="9e578e3d-0119-425c-8633-f54ffaaa4929">
        <UpgradeVersion Minimum="@product.version@" OnlyDetect="yes" Property="NEWERVERSIONDETECTED"/>
        <UpgradeVersion Minimum="0.0.0" Maximum="@product.version@" IncludeMinimum="yes" IncludeMaximum="no" Property="OLDERVERSIONBEINGUPGRADED"/>   
    </Upgrade>
    <Condition Message="A newer version of this software is already installed.">NOT NEWERVERSIONDETECTED</Condition>

    <!-- Prerequisites -->
    <Condition Message="This application requires .NET Framework 4.6 or newer. Please install the .NET Framework then run this installer again.">
      <![CDATA[Installed OR WIX_IS_NETFRAMEWORK_46_OR_LATER_INSTALLED]]>
    </Condition>

    <Condition Message="This application requires at least Windows 7 or Windows Server 2008 R2. Please upgrade your computer to a supported operating system and run this installer again.">
      <![CDATA[Installed OR (VersionNT >= 601)]]>
    </Condition>

    <!-- Define the directory structure -->
    <Directory Id="TARGETDIR" Name="SourceDir">
      <Directory Id="ProgramFilesFolder" Name="ProgramFiles">
        <Directory Id="INSTALLDIR" Name="@product.company@">
            @product.applicationfiles@
            @product.servicefiles@
        </Directory>
      </Directory>
      <Directory Id="ProgramMenuFolder">
        <Directory Id="ApplicationProgramsFolder" Name="@product.name@"/>
        <Directory Id="ServiceProgramsFolder" Name="@product.name@"/>
      </Directory>
      <Directory Id="DesktopFolder" Name="Desktop" /> 
      <Directory Id="LocalAppDataFolder">
        <Directory Id="ApplicationDataFolder" Name="Acme" />
      </Directory>            
    </Directory>

    <DirectoryRef Id="ApplicationProgramsFolder">
        <Component Id="ApplicationShortcut" Guid="1e578e4d-0229-425c-8633-f54ffaaa4901">
            <Shortcut Id="ApplicationStartMenuShortcut" 
                Name="SomeApp 4.6" 
                Description="@product.company@ @product.name@ @product.version@"
                Target="[INSTALLDIR]SomeApp 4\SomeApp.UserInterface.exe"
                WorkingDirectory="INSTALLDIR"
                Icon ="ApplicationIcon"/>       
            <Shortcut Id="ApplicationStartMenuShortcut2" 
                Name="SomeApp 4.6 (Multiple Instances)" 
                Description="@product.company@ @product.name@ @product.version@"
                Target="[INSTALLDIR]SomeApp 4\SomeApp.UserInterface.exe"
                Arguments="MultipleInstance=True"
                WorkingDirectory="INSTALLDIR"
                Icon ="ApplicationIcon"/>  
            <Shortcut Id="ApplicationStartMenuShortcut3" 
                Name="SomeApp 4.6 (Notifications)" 
                Description="@product.company@ @product.name@ @product.version@"
                Target="[INSTALLDIR]SomeApp 4\SomeApp.UserInterface.exe"
                Arguments="Notifications=True"
                WorkingDirectory="INSTALLDIR"
                Icon ="ApplicationIcon"/>                   
            <Shortcut Id="HelpStartMenuShortcut" 
                Name="SomeApp 4.6 Help" 
                Target="[INSTALLDIR]SomeApp 4\Documentation\SomeApp.chm"
                WorkingDirectory="INSTALLDIR"/>                 
            <Shortcut Id="UninstallProduct"             
                      Name="Uninstall SomeApp 4.6"
                      Target="[SystemFolder]msiexec.exe"
                      Arguments="/x [ProductCode]"
                      Description="Uninstall @product" />                    
            <Shortcut Id="desktopshortcut" 
                      Directory="DesktopFolder" 
                      Name="SomeApp 4.6" 
                      WorkingDirectory="INSTALLDIR" 
                      Target="[INSTALLDIR]SomeApp 4\SomeApp.UserInterface.exe" />
            <RemoveFolder Id="ApplicationProgramsFolder" On="uninstall"/>
            <util:RemoveFolderEx On="uninstall" Property="ApplicationDataFolder" />                       
       </Component>
    </DirectoryRef>

    <DirectoryRef Id="ServiceProgramsFolder">
       <Component Id="ServiceShortcut" Guid="9e578e3d-0229-425c-8633-f54ffaaa4901">
            <Shortcut Id="ServiceStartMenuShortcut"
                Name="@product.name@ Reporting Service" 
                Description="@product.name@ Reporting Service"
                Target="[INSTALLDIR]Reporting\SomeApp.ReportingService.exe"
                WorkingDirectory="INSTALLDIR"
                Icon ="ApplicationIcon"/>
            <RemoveFolder Id="ServiceProgramsFolder" On="uninstall"/>                    
            <RegistryValue Root="HKCU" Key="Software\Microsoft\Acme\SomeApp" Name="service-installed" Type="integer" Value="1" KeyPath="yes"/>                   
       </Component>
    </DirectoryRef>   

    <DirectoryRef Id="INSTALLDIR">
        <Component Id="CleanupMainApplicationFolder" Guid="*">
            <RegistryValue Root="HKCU" Key="SOFTWARE\Acme\SomeApp" Name="installation-path" Type="string" Value="[INSTALLDIR]" KeyPath="yes" />
            <util:RemoveFolderEx On="uninstall" Property="INSTALLDIR" />                
            <util:RemoveFolderEx On="uninstall" Property="ApplicationDataFolder" />                
        </Component>
    </DirectoryRef>

    <!--  Feature: SomeApp Application -->            
    <Feature Id="Feature.Application"
                     Title="SomeApp 4 - Application"
                     Description="SomeApp is an asset management and maintenance application designed to optimize asset value and improve manufacturing productivity."
                     ConfigurableDirectory="INSTALLDIR"
                     Level="1"
                     AllowAdvertise="no">
                    @product.applicationcomponents@
                    <ComponentRef Id="ApplicationShortcut" />                    
                    <ComponentRef Id="CleanupMainApplicationFolder" />                    
    </Feature>

    <!--  Feature: Reporting Service -->
    <Feature Id="Feature.Service"
                     Title="SomeApp 4 - Reporting Service"
                     Description="This service generates and delivers reports that have been scheduled in the SomeApp Maintenance Management System."
                     ConfigurableDirectory="INSTALLDIR"
                     Level="3"
                     AllowAdvertise="no">
                    @product.servicecomponents@    
                    <ComponentRef Id="ServiceShortcut" />                    
        <Component Id="ReportingServiceInstaller" Guid="B72CAA3F-F2DB-48D2-90DD-061209AB2CE5" Directory="INSTALLDIR">
            <CreateFolder />
            <File Id="ReportingService.exe" Name="ReportingService.exe" KeyPath="yes" Source="@product.sourcedir@\Reporting\SomeApp.ReportingService.exe"/>
            <ServiceInstall Id="ReportingServiceInstaller"
                Type="ownProcess"
                Vital="yes"
                Name="SomeApp Reporting Service"                    
                DisplayName="SomeApp - Reporting Service"
                Description="This service generates and delivers reports that have been scheduled in the SomeApp Maintenance Management System."
                Start="auto"
                Account="NT AUTHORITY\LocalService"
                ErrorControl="ignore"
                Interactive="no" />
        </Component>     

    </Feature>

    <CustomAction Id="Cleanup_logfile" Directory="INSTALLDIR" 
    ExeCommand="cmd /C &quot;rmdir %LOCALAPPDATA%\Acme /s /q&quot;" 
    Execute="deferred" Return="ignore" HideTarget="no" Impersonate="no" />

    <InstallExecuteSequence>
      <Custom Action="Cleanup_logfile" After="RemoveFiles" >
        REMOVE="ALL" 
      </Custom>
    </InstallExecuteSequence>

    <InstallExecuteSequence>
        <RemoveExistingProducts After="InstallValidate"/>
    </InstallExecuteSequence>   

    <UIRef Id="WixUI_FeatureTree" />
    <UI>
      <DialogRef Id="FilesInUse" />
      <DialogRef Id="MsiRMFilesInUse" />
      <!-- Add the GUI logic for installation -->
    </UI>
  </Product>
</Wix>
布莱恩·萨瑟兰

我有一个使用util:RemoveFolderEx的项目,该项目正常工作。我可以看到的唯一区别是,我在运行时将属性显式设置为安装目录的值。我的猜测是“ INSTALLDIR”和“ ApplicationDataFolder”实际上不是属性,因为它们存储在您的msi的目录表中而不是属性表中。(使用ORCA检查)

尝试做

<SetProperty Id='AcmeAppDataFolderToRemove' Value='[ApplicationDataFolder]' After='AppSearch'/>

然后将您的util:RemoveFolderEx更改为

<util:RemoveFolderEx On="uninstall" Property="AcmeAppDataFolderToRemove" />

看看是否可行。(您可能需要不确定[]的情况下使用Value ='ApplicationDataFolder'。)


为了响应您的编辑,我去查看了RemoveFolderEx页面,这看起来很重要

实现RemoveFolderEx的自定义操作是通过将临时行写入您指定的根文件夹的每个子文件夹的RemoveFile表中来实现的。因为它可能会严重影响Windows Installer的文件成本核算,所以必须在CostInitialize标准操作之前写入临时行。不幸的是,直到以后,MSI才在CostFinalize操作中为包中的目录层次结构创建属性。

我认为将其设置为目录可以工作,但是当RemoveFolderEx操作实际执行时,这些目录显然还没有值。因此,当此方法尝试解析属性或设置属性时,它们实际上只是空的。

说的安装程序与实际执行的安装之间的区别是,我通过RegistrySearch获得了将属性设置为的值。

<Property Id="INSTALLDIR">
    <RegistrySearch 
        Id='InstallDirRegistrySearch' 
        Type='raw'
        Root='HKLM' 
        Key='SOFTWARE\$(var.OEMRegistryRootKeyName)' 
        Name='SDKPath' />
</Property>
<SetProperty Id='SDKFolderToRemove' Value='[INSTALLDIR]\$(var.OEMProduct) SDK' After='AppSearch'/>

因此,我将尝试将appdata目录写入注册表项,然后通过注册表搜索将值转换为属性,然后在removefolderex中使用该属性,您可能不需要setproperty,因为我需要在INSTALLDIR下的文件夹但是根据您的情况,您可以只将注册表项设置为正确的文件夹。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

卸载时如何通过Wix删除生成的文件夹和文件?

来自分类Dev

Wix卸载未删除文件,始终假定程序文件\ myApp文件夹

来自分类Dev

Wix卸载未删除文件,始终假定为program files \ myApp文件夹

来自分类Dev

WiX卸载时删除文件,但不更新

来自分类Dev

您可以安全删除AppData中的文件夹吗?

来自分类Dev

卸载Debian软件包时如何删除其他文件夹?

来自分类Dev

如何使用 RemoveFolderEx 在安装和卸载时递归删除 LocalAppData 中的文件夹

来自分类Dev

在AppData文件夹中加载表单时的相对引用

来自分类Dev

无法删除文件夹WIX安装程序

来自分类Dev

wix-如何删除非空文件夹

来自分类Dev

当应用程序关闭或在Android中卸载时如何从SD卡中删除文件夹

来自分类Dev

无法从appdata文件夹复制文件

来自分类Dev

WIX-在已安装的文件夹中创建卸载快捷方式

来自分类Dev

WIX-在已安装的文件夹中创建卸载快捷方式

来自分类Dev

如何访问AppData文件夹?

来自分类Dev

如何访问AppData文件夹?

来自分类Dev

重复的 appdata\local\packages 文件夹

来自分类Dev

我可以安全删除Windows计算机上的“ ... \ AppData \ Local \ Redis”文件夹吗?

来自分类Dev

从所有用户本地AppData删除公用文件夹

来自分类Dev

从C:\ Users \(Username)\ AppData \ LocalLow \ Sun \ Java删除Java文件夹是否安全?

来自分类Dev

Windows 7-删除AppData文件夹时会发生什么?

来自分类Dev

临时文件夹已在用户%appdata%中删除

来自分类Dev

复制AppData目录后无法删除“ Application Data”文件夹

来自分类Dev

在命名文件或文件夹时删除字符

来自分类Dev

卸载SMB共享文件夹

来自分类Dev

如何卸载共享文件夹

来自分类Dev

如何卸载NuGet软件包而不删除其文件夹?

来自分类Dev

Inno Setup:在卸载过程中重新启动后删除文件夹

来自分类Dev

在不卸载设备的情况下删除已安装的文件夹?

Related 相关文章

  1. 1

    卸载时如何通过Wix删除生成的文件夹和文件?

  2. 2

    Wix卸载未删除文件,始终假定程序文件\ myApp文件夹

  3. 3

    Wix卸载未删除文件,始终假定为program files \ myApp文件夹

  4. 4

    WiX卸载时删除文件,但不更新

  5. 5

    您可以安全删除AppData中的文件夹吗?

  6. 6

    卸载Debian软件包时如何删除其他文件夹?

  7. 7

    如何使用 RemoveFolderEx 在安装和卸载时递归删除 LocalAppData 中的文件夹

  8. 8

    在AppData文件夹中加载表单时的相对引用

  9. 9

    无法删除文件夹WIX安装程序

  10. 10

    wix-如何删除非空文件夹

  11. 11

    当应用程序关闭或在Android中卸载时如何从SD卡中删除文件夹

  12. 12

    无法从appdata文件夹复制文件

  13. 13

    WIX-在已安装的文件夹中创建卸载快捷方式

  14. 14

    WIX-在已安装的文件夹中创建卸载快捷方式

  15. 15

    如何访问AppData文件夹?

  16. 16

    如何访问AppData文件夹?

  17. 17

    重复的 appdata\local\packages 文件夹

  18. 18

    我可以安全删除Windows计算机上的“ ... \ AppData \ Local \ Redis”文件夹吗?

  19. 19

    从所有用户本地AppData删除公用文件夹

  20. 20

    从C:\ Users \(Username)\ AppData \ LocalLow \ Sun \ Java删除Java文件夹是否安全?

  21. 21

    Windows 7-删除AppData文件夹时会发生什么?

  22. 22

    临时文件夹已在用户%appdata%中删除

  23. 23

    复制AppData目录后无法删除“ Application Data”文件夹

  24. 24

    在命名文件或文件夹时删除字符

  25. 25

    卸载SMB共享文件夹

  26. 26

    如何卸载共享文件夹

  27. 27

    如何卸载NuGet软件包而不删除其文件夹?

  28. 28

    Inno Setup:在卸载过程中重新启动后删除文件夹

  29. 29

    在不卸载设备的情况下删除已安装的文件夹?

热门标签

归档