我想在卸载我的软件时运行程序,这是一个简单的表单,应该收集一些关于人们为什么要卸载我的软件的反馈。
我发现一些WiX示例在某种程度上起作用。
使用标准的Windows程序(记事本)可以很好地工作,但是当我尝试运行自己的程序时,它不起作用。我认为问题是程序在运行之前被删除了。
我曾尝试打印日志,但他们没有给我任何线索。
到目前为止我的代码:
<CustomAction Id="LaunchFeedBackForm"
ExeCommand="notepad.exe" Directory="INSTALLDIR"
Return="asyncWait" >REMOVE="ALL"</CustomAction>
<InstallExecuteSequence>
<Custom Action="LaunchFeedBackForm" After="InstallValidate"/>
</InstallExecuteSequence>
因此,在用户关闭反馈表单之前,我需要以某种方式停止卸载或取消任何操作。表单关闭后,应继续并删除所有软件,包括反馈表单程序。
答案 0 :(得分:4)
您希望获得用户反馈的方式对我来说并不是那么自然。如果我理解正确,你想显示这个反馈表并等待用户填写,然后再继续卸载,对吧?
根据我自己的经验,当用户决定卸载软件时,他/她希望尽可能快速,清晰地卸载软件。在他们面前加上“必填”形式只会对用户体验产生负面影响。而且,正如您所看到的,从技术角度来看,这更加困难。我想你也考虑过将这些反馈传递给你,对吗?是通过电子邮件发送用户输入的信息吗?你如何确保电子邮件被发送?
或者,您可以在网站的某个网页上联机使用此表单,并在卸载完成后启动它(不在进行中)。通过这种方式,您不会惹恼用户阻止卸载过程。
所以,我会做以下事情:
答案 1 :(得分:1)
如果您的EXE在MSI中,请尝试使用FileKey属性:http://wix.sourceforge.net/manual-wix2/wix_xsd_customaction.htm
例如,如果您的EXE定义如下:
<File Id="FeedbackExe" Name="FeedbackExe.exe"/>
你可以使用:
<CustomAction Id="LaunchFeedBackForm"
FileKey="FeedbackExe" Execute="deferred"
Return="asyncWait">REMOVE="ALL"</CustomAction>
您还可以尝试创建卸载日志,以查看自定义操作会发生什么:
msiexec.exe /x <ProductCode> /L*V "C:\uninstall.log"
您使用的是实际的ProductCode。
答案 2 :(得分:0)
所以我需要以某种方式取消安装过程来停止或者说什么, 直到用户关闭了反馈表。表格之后 关闭,它应该继续并删除所有软件,包括 反馈表格程序。
要执行此操作,请设置After =“InstallValidate”
<InstallExecuteSequence>
<Custom Action="InstallCustomLogic" After="InstallFinalize" />
<Custom Action="UninstallCustomLogic"
After="InstallValidate" >
NOT UPGRADINGPRODUCTCODE) AND (REMOVE="ALL")
</Custom>
</InstallExecuteSequence>
设置Return属性以进行检查,以便安装程序将暂停,直到指定的可执行文件返回。
<CustomAction Id="UninstallCustomLogic"
Directory="INSTALLFOLDER"
ExeCommand="[INSTALLFOLDER]\RetailConnectCustomLogic.exe uninstall"
Return="check"
/>
在卸载程序之前需要运行程序目录中的某些内容时,这非常有用。如果属性不返回0
,也可以将属性设置为忽略