在卸载时运行程序

时间:2011-02-01 12:02:49

标签: wix

我想在卸载我的软件时运行程序,这是一个简单的表单,应该收集一些关于人们为什么要卸载我的软件的反馈。

我发现一些WiX示例在某种程度上起作用。

使用标准的Windows程序(记事本)可以很好地工作,但是当我尝试运行自己的程序时,它不起作用。我认为问题是程序在运行之前被删除了。

我曾尝试打印日志,但他们没有给我任何线索。

到目前为止我的代码:

<CustomAction Id="LaunchFeedBackForm" 
 ExeCommand="notepad.exe" Directory="INSTALLDIR" 
 Return="asyncWait" >REMOVE="ALL"</CustomAction>


<InstallExecuteSequence>
    <Custom Action="LaunchFeedBackForm" After="InstallValidate"/>
</InstallExecuteSequence>

因此,在用户关闭反馈表单之前,我需要以某种方式停止卸载或取消任何操作。表单关闭后,应继续并删除所有软件,包括反馈表单程序。

3 个答案:

答案 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

,也可以将属性设置为忽略