WIX-如何在On=”的情况下使用RemoveFolderEx;安装";/&引用;两者都是;?
我试图在“安装”(和“卸载”)时删除文件夹,但该文件夹仅在“卸载”时删除。WIX-如何在On=”的情况下使用RemoveFolderEx;安装";/&引用;两者都是;?,wix,Wix,我试图在“安装”(和“卸载”)时删除文件夹,但该文件夹仅在“卸载”时删除。 有什么提示可以做到这一点吗 <Property Id="PACKAGEFOLDER"> <RegistrySearch Root="HKLM" Key="$(var.RegKey)" Type="raw" Id="PKGFOLDER_REGSEARCH" Name="PkgDir" /> </Property> <Directory Id="TARGETDIR" Name=
有什么提示可以做到这一点吗
<Property Id="PACKAGEFOLDER">
<RegistrySearch Root="HKLM" Key="$(var.RegKey)" Type="raw" Id="PKGFOLDER_REGSEARCH" Name="PkgDir" />
</Property>
<Directory Id="TARGETDIR" Name="SourceDir">
<Directory Id="ProgramFilesFolder">
<Directory Id="PACKAGE" Name="$(var.PkgFolder)">
<Component Id="PackagesFiles" Guid="$(var.FilesGUID)">
<RegistryValue Root="HKLM" Key="$(var.RegKey)" Name="PkgDir" Type="string" Value="[PACKAGE]" KeyPath="yes" />
<util:RemoveFolderEx On="both" Property="PACKAGEFOLDER" />
</Component>
</Directory>
</Directory>
</Directory>
刚刚注意到:
如果在安装开始之前注册表中有可用的注册表项,则它将工作:
WixRemoveFoldersEx:递归路径:C:\Program Files(x86)。。。对于
世界其他地区:wrf945C37509CA5EEDC2367957D5F072DFF。MSI(s)(94!A8)
[19:17:55:185]:属性更改:添加_UNOPACKAGEFOLDER_0属性。
其值为“C:\ProgramFiles(x86)。。。微星(s)(94:D4)
[19:17:55:185]:执行操作:成本初始化
但如果注册表项不在注册表中,日志会显示:
WixRemoveFoldersEx:错误0x80070057:缺少文件夹属性:
行的应用程序文件夹:wrfA308D08284221970F6338358BFB75917
CustomAction WixRemoveFoldersEx返回实际错误代码1603,但
由于继续标记MSI(84:50),将转化为成功
[19:29:08:529]:执行操作:成本初始化
是否可以在设置属性“PACKAGEFOLDER”之前写入注册表项?我假设您在该文件夹中也有应该删除的文件。如果没有包含文件的(任意)子目录,则应直接使用Windows Installer的
RemoveFile
-表。由于只有在文件夹为空时才会删除该文件夹,请添加一个附加条目以删除其中的文件,例如:
<Directory Id="TARGETDIR" Name="SourceDir">
<Directory Id="ProgramFilesFolder">
<Directory Id="PACKAGE" Name="$(var.PkgFolder)">
<Component Id="PackagesFiles" Guid="$(var.FilesGUID)">
<RegistryValue Root="HKLM" Key="$(var.RegKey)" Name="PkgDir" Type="string" Value="[PACKAGE]" KeyPath="yes" />
<RemoveFile Id="RemovePACKAGEFolderFiles" Directory="PACKAGE" Name="*.*" On="both" />
<RemoveFolder Id="RemovePACKAGEFolder" Directory="PACKAGE" On="both" />
</Component>
</Directory>
</Directory>
</Directory>
这样,您就不必处理任何属性设置。如果您有其他包含文件的子目录,则必须对这些子目录重复此操作
另一种方法是在系统上下文中创建一个延迟的自定义操作,该操作将完全删除文件夹,例如在VBScript中。如果添加
,您可以在安装过程中获取软件包的值。从 删除“KeyPath”似乎没有什么区别。非常感谢这个提示,但不幸的是,我的文件夹中包含许多子文件夹和名称未知的文件。作为一种解决方法,我现在使用第二个msi(“预安装”),它将设置必要的注册表项。也许您还可以为属性提供一个默认参数。这样,它将使用RegSearch的值,如果找不到注册表项,则只使用提供的默认值(即Property元素的value属性)。