卸载我的应用程序时,我想配置Wix设置以删除原始安装后添加的所有文件.看起来卸载程序只删除了最初从MSI文件安装的目录和文件,并且它保留了稍后在应用程序文件夹中添加的所有其他内容.换句话说,我想在卸载时清除目录.我怎么做?
我搜索了一下,发现了一些话题
http://wix.sourceforge.net/manual-wix3/run_program_after_install.htm
和
但是,我不使用任何ui.只需简单的安装!至今
<CustomAction Id="LaunchApp" Directory="INSTALLDIR" ExeCommand="[SystemFolder]cmd.exe /C MyExe.exe" />
<InstallExecuteSequence>
<RemoveExistingProducts Before="InstallInitialize" />
<Custom Action="LaunchApp" After="InstallFinalize" />
</InstallExecuteSequence>
Run Code Online (Sandbox Code Playgroud)
但是当我启动安装程序时,会弹出一个窗口:"请等待Windows配置MyProgram".在它上面只有一个闪烁的光标cmd.exe,当我关闭cmd时,我收到消息:"这个Windows Installer程序包有问题.无法运行此安装完成所需的程序." 虽然计划仍然开放.我怎样才能正确地做到这一点(没有任何UI)?提前致谢!
我有两个自定义操作,其中一个我想在安装我的产品时执行,另一个在卸载时执行.
我的自定义操作当前在"InstallFinalize"之后从合并模块调用,但安装和卸载都会发生这种情况.我已经尝试添加"NOT INSTALLED AND NOT UPGRADINGPRODUCTCODE"条件,但这给了我一个错误:
错误2762.无法编写脚本记录.交易未开始.
我也尝试附加到其他操作(例如,UnpublishComponents),但我找不到任何安装或卸载独有的操作.
我该如何解决这个问题?
在安装或主要升级期间,如果用户已将应用程序固定到其任务栏,则在安装完成后,将从\ AppData\Roaming\Microsoft\Internet Explorer\Quick Launch\User Pinned\TaskBar中删除任务栏快捷方式并在其位置留下空白文件图标(请参见下面的图像链接).单击该图标将提示用户删除,因为它没有任何目标.
http://i.stack.imgur.com/kz1zW.png
我想在安装或运行主要升级时根本不删除任务栏快捷方式.我们每周推出更新,如果任务栏快捷方式在每次更新期间中断,则可能会令人沮丧.
这可能吗?我已经读过有关修改RemoveExistingProducts的值(即从InstallValidate更改为InstallFinalize),但我不确定这是否可行.
谢谢.
我正在为MVVM Light安装一个安装程序(MSI,Wix)并遇到问题.我需要在安装和卸载时运行devenv.exe/setup以将模板添加/删除到New Project菜单.虽然我们在安装时确定了语法,但我们无法找到在卸载时运行此语法的正确语法.
这就是我们所拥有的:
<InstallExecuteSequence>
<Custom Action='UpdateVS2010Templates'
After='InstallFiles'>VS2010EXISTS</Custom>
<Custom Action='UpdateVS2010TemplatesUninstall'
After='RemoveFiles'>REMOVE = "All"</Custom>
</InstallExecuteSequence>
Run Code Online (Sandbox Code Playgroud)
同
<CustomAction Id="UpdateVS2010Templates"
Impersonate="no"
Execute="deferred"
Directory="INSTALLLOCATION"
ExeCommand='"[VS10INSTALL]\Common7\IDE\DEVENV.EXE" /SETUP'
Return='ignore' >
</CustomAction>
<CustomAction Id="UpdateVS2010TemplatesUninstall"
Impersonate="no"
Execute="deferred"
Directory="INSTALLLOCATION"
ExeCommand='"[VS10INSTALL]\Common7\IDE\DEVENV.EXE" /SETUP'
Return='ignore' >
</CustomAction>
Run Code Online (Sandbox Code Playgroud)
任何人都可以指出正确的语法是什么?
谢谢!洛朗
我想知道是否可以从自定义操作手动运行RemoveFolderEx元素.我猜可能不是,但有人可能知道一种我不知道的方式.
我的问题是我想运行RemoveFolderEx元素,但只在真正的UNINSTALL上,但是我的程序在升级时执行它,因为我在重新安装之前将其设置为uninstall.
我尝试通过这个方法 Wix:条件属性不工作, 但它不起作用,仍然运行时重新安装.
我唯一能想到的是能够从自定义操作中手动设置RemoveFolderEx,我知道我在正确的点运行并且仅在真正的卸载时运行.也许我的自定义操作可以使用c ++ dll,然后手动将命令添加到MSI接口,但如果我走得那么远,那么自己也可以完全编写删除逻辑.
谢谢.尼尔
编辑:我终于得到了这个工作,这是一个示例wix来显示我做了什么.
<Property Id='P.REMOVEDATAFOLDER' Secure='yes' />
<DirectoryRef Id="DATADIR">
<Component Id="C.RemoveDataFolder" Guid="myguid" KeyPath="yes">
<util:RemoveFolderEx On="uninstall" Property="P.REMOVEDATAFOLDER" />
</Component>
</DirectoryRef>
<CustomAction Id="CA.SetDataFolder" Property="P.REMOVEDATAFOLDER" Value='[DATADIR]' />
<InstallExecuteSequence>
<Custom Action="CA.SetDataFolder" Before="ValidateProductID" >(NOT UPGRADINGPRODUCTCODE) AND (REMOVE="ALL")</Custom>
</InstallExecuteSequence>
Run Code Online (Sandbox Code Playgroud)
在从注册表中读取DATADIR但在CostInitialize操作之前,属性P.REMOVEDATAFOLDER 仅在真正的卸载时设置.
我正在开发一个应该在wix v3.8中安装Windows服务的安装程序.问题是我们需要进行重大升级而不卸载服务只是为了阻止它.
我们在包含服务exe文件的组件中使用ServiceInstall和ServiceControl.有没有办法使ServiceInstall的执行有条件(使用像REMOVE ="ALL"和NOT UPGRADINGPRODUCTCODE这样的条件)所以升级时没有卸载服务(刚刚停止,所以我们可以升级文件)?
一种解决方案是使用自定义操作,但也许有更好的方法?
谢谢!
我有一个自定义操作,将文件添加到安装目录.卸载程序时,另一个自定义操作会尝试删除这些文件,以便删除安装目录.
问题是我的自定义卸载操作在删除标准安装文件后运行,因此安装目录保留在那里,尽管它是空的.
配置看起来类似于:
<CustomAction Id="AddFilesAction" BinaryKey="installerActions" DllEntry="AddFiles" Execute="deferred" Return="check" Impersonate="no" />
<CustomAction Id="CleanupAction" BinaryKey="installerActions" DllEntry="Cleanup" Execute="deferred" Return="check" Impersonate="no" />
<InstallExecuteSequence>
<Custom Action="CleanupAction" Before="InstallFiles">Installed</Custom>
<Custom Action="AddFilesAction" After="InstallFiles">NOT Installed</Custom>
</InstallExecuteSequence>
Run Code Online (Sandbox Code Playgroud)
我可以在CleanupActionmsi开始删除安装文件之前运行,以便自定义文件已被删除,msi可以删除主安装目录吗?
我正在使用WiX 3.10制作安装程序.我的原始任务是将Postgres文件复制到目标系统,初始化集群,注册服务,启动它并在安装时恢复数据库,以及反向停止服务,将其从系统中删除,并清除集群数据.我编写了两个bat文件,并添加了自定义操作来执行它们以及各个地方描述的一些条件,但它们都没有工作.我已尝试使用和不使用CDATA,已安装,已安装和其他一些变体,但它始终执行这两个操作.
这是我正在尝试的wix文件.
<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
<Product Id="*" Name="Hatred_6" Language="1033" Version="1.0.0.0" Manufacturer="Satan" UpgradeCode="d9602b10-8428-4031-8c82-99288b21377f">
<Package InstallerVersion="405" Compressed="yes" InstallScope="perMachine" InstallPrivileges="elevated"/>
<MajorUpgrade DowngradeErrorMessage="A newer version of [ProductName] is already installed." />
<MediaTemplate EmbedCab="yes" />
<CustomAction Id="AAction" Directory="INSTALLFOLDER" Execute="deferred" Impersonate="no" Return="check"
ExeCommand="cmd.exe /c "a.bat"">NOT Installed</CustomAction>
<CustomAction Id="BAction" Directory="INSTALLFOLDER" Execute="deferred" Impersonate="no" Return="check"
ExeCommand="cmd.exe /c "b.bat"">Installed</CustomAction>
<InstallExecuteSequence>
<Custom Action="BAction" After="InstallFiles" />
<Custom Action="AAction" After="InstallFiles" />
</InstallExecuteSequence>
<Feature Id="ProductFeature" Title="Hatred_6" Level="1">
<ComponentGroupRef Id="ProductComponents" />
</Feature>
</Product>
<Fragment>
<Directory Id="TARGETDIR" Name="SourceDir">
<Directory Id="ProgramFilesFolder">
<Directory Id="INSTALLFOLDER" Name="Hatred_6" …Run Code Online (Sandbox Code Playgroud) 我们有一个安装程序,需要在安装时重新启动,但在卸载时也会重新启动。有什么方法可以防止卸载时重新启动吗?
这是我们目前所拥有的:
<InstallExecuteSequence>
<ScheduleReboot After="InstallFinalize"/>
</InstallExecuteSequence>
Run Code Online (Sandbox Code Playgroud)
提前谢谢了!