我想修改MSI安装程序(通过WiX创建)以在卸载时删除整个目录.
我理解WiX中的选项RemoveFile和RemoveFolder选项,但是它们不够强大,无法递归删除安装后创建内容的整个文件夹.
我注意到类似的Stack Overflow问题在卸载WiX时删除文件,但我想知道是否可以通过调用批处理脚本删除文件夹来更简单地完成此操作.
这是我第一次使用WiX,而且我仍然掌握了自定义操作.在卸载时运行批处理脚本的自定义操作的基本示例是什么?
我想在msi安装程序进行重大升级时保留配置文件.对于配置文件,我在安装时进行了更改.代码如下:
<Component Id="MODIFYCONFIG" Guid="6A1D7762-B707-4084-A01F-6F936CC159CE" Win64="yes">
<File Id="Application.config" Name="Application.config" Vital="yes" KeyPath="yes" Source="Resource\Application.config"></File>
<util:XmlFile Id="SetValueIP" Action="setValue" Permanent="yes" File="[#Application.config]"
ElementPath="/configuration/applicationSettings/Application.Properties.Settings/setting[\[]@name='IpAddress'[\]]/value" Value="[IPADDRESS]" Sequence="1"/>
<util:XmlFile Id="SetValuePort" Action="setValue" Permanent="yes" File="[#Application.config]"
ElementPath="/configuration/applicationSettings/Application.Properties.Settings/setting[\[]@name='IpPort'[\]]/value" Value="[PORT]" Sequence="2"/>
<Condition>Not Installed</Condition>
</Component>
<Component Id="KEEPCONFIG" Guid="F7F173AA-C2FD-4017-BFBC-B81852A671E7" Win64="yes">
<RemoveFile Id="ApplicationConfig" Name="Application.config" On="uninstall"/>
<Condition>(REMOVE=ALL) AND (NOT UPGRADINGPRODUCTCODE)</Condition>
</Component>
Run Code Online (Sandbox Code Playgroud)
但是,当发生重大升级时,不会保留文件.如何保留修改后的文件?
我告诉wix MSI文件在卸载时删除文件,它只是没有注册它.
对于bundle,我这样调用MSI文件:
<MsiPackage SourceFile="..\..\..\..\Kiosk\MyProject\bin\Release\MyProject.msi" Name="MyProject.msi" DisplayInternalUI="yes" Permanent="no" />
Run Code Online (Sandbox Code Playgroud)
在MSI文件中我称之为:
<ComponentGroup Id="Purge" Directory="INSTALLFOLDER">
<Component Id="PurgeFiles" Guid="">
<RemoveFile Id="RemoveBaseFolder" Name="*" On="uninstall" Directory="INSTALLFOLDER" />
<RemoveFile Id="RemoveLanguage_af" Directory="Language_af" Name="*.*" On="uninstall"/>
<RemoveFile Id="RemoveLanguage_de" Name="*.*" On="uninstall" Directory="Language_de"/>
<RemoveFile Id="RemoveLanguage_es" Name="*.*" On="uninstall" Directory="Language_es"/>
<RemoveFile Id="RemoveLanguage_fr" Name="*.*" On="uninstall" Directory="Language_fr"/>
<RemoveFile Id="RemoveLanguage_it" Name="*.*" On="uninstall" Directory="Language_it"/>
<RemoveFile Id="RemoveLanguage_ja" Name="*.*" On="uninstall" Directory="Language_ja"/>
<RemoveFile Id="RemoveLanguage_ko" Name="*.*" On="uninstall" Directory="Language_ko"/>
<RemoveFile Id="RemoveLanguage_ru" Name="*.*" On="uninstall" Directory="Language_ru"/>
<RemoveFile Id="Removezh_CN" Name="*.*" On="uninstall" Directory="zh_CN"/>
<RemoveFile Id="RemoveDatabase" Name="*.*" On="uninstall" Directory="Database"/>
<RemoveFile Id="RemoveFileData" Name="*.*" On="uninstall" Directory="FileData"/>
<RemoveFile Id="RemoveRecordingTempData" Name="*.*" …Run Code Online (Sandbox Code Playgroud) 安装后,我的文件夹中具有以下文件夹结构C:\Program Files (x86):
文件夹的路径generated为:C:\Program Files (x86)\CompanyName\AppName\generated
该文件夹generated包含子文件夹和文件,它们将由应用程序在运行时通过C#代码创建:
var lPathToDir = Path.Combine(lFileService.GetFilePath, pSamAccountName);
if (!Directory.Exists(lPathToDir))
{
Directory.CreateDirectory(lPathToDir);
}
Run Code Online (Sandbox Code Playgroud)
该变量lPathToDir可以具有以下值:
C:\Program Files (x86)\CompanyName\AppName\generated\user1
// or
C:\Program Files (x86)\CompanyName\AppName\generated\user2
Run Code Online (Sandbox Code Playgroud)
然后看起来像:
我的问题:卸载后,这些子文件夹user1,user2将不会被删除。我使用以下Wix声明:
<!-- Target installation folder -->
<Directory Id="ProgramFilesFolder" Name="$(var.ProgramFilesFolder)">
<Directory Id="APPLICATIONFOLDER" Name="$(var.AppFolderName)">
<Directory Id="BIN" Name="bin" />
<Directory Id="HELP" Name="help" />
<Directory Id="GENERATED" Name="generated" />
<Component Id="RemoveAll" Guid="THE-GUID-HERE">
<RemoveFile Id="RemoveAllFilesOnUninstall" Directory="APPLICATIONFOLDER" Name="*.*" On="uninstall" />
<RemoveFolder Id="RemoveAllFoldersOnUninstall" Directory="APPLICATIONFOLDER" On="uninstall" />
<util:RemoveFolderEx …Run Code Online (Sandbox Code Playgroud) 我正在学习WIX为我的应用程序构建安装程序但我仍然坚持删除文件.我的问题是如何在卸载时删除文件和文件夹.当我单击"删除"按钮时,安装程序创建的所有文件和文件夹在卸载时都不会删除.
我想从WIX执行DOS命令.命令如下:
[SystemFolder]cmd.exe /c rmdir /s /q [INSTALLDIR]
Run Code Online (Sandbox Code Playgroud)
基本上我想在卸载期间从命令提示符下删除安装目录.
我想使用SystemFolder属性指定cmd.exe路径.最重要的是,我不希望在卸载期间出现命令窗口.