2010-04-23 129 views
4

我在写一个新的重要升级产品。 在我的安装程序中,我先找到以前版本的配置设置,然后我想卸载以前的版本。WiX:强力推出卸载以前使用CustomAction

我发现了几个指南,告诉我应该如何让MSI适合这种升级。

但是,以前不是MSI。
它不是根据最佳实践。但是,它在注册表HKLM \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ Uninstall {GUID}中指定了一个UninstallString

使用RegistrySearch我可以很容易地找到下面的命令,我存储在UNINSTALL_CMD中。

RunDll32 C:\PROGRA~1\COMMON~1\INSTAL~1\PROFES~1\RunTime\10\01\Intel32\Ctor.dll,LaunchSetup 
    "C:\Program Files\InstallShield Installation Information\{GUID}\setup.exe" 
    -l0x9 -removeonly 4: 

我无法获得执行实际卸载所需的CustomAction挂起。

 <CustomAction Id="ca.UninstPrev" Property="UNINSTALL_CMD" ExeCommand="" /> 

微星记录说:
信息1721。与此Windows安装程序包的问题。此安装完成所需的程序无法运行。联系您的支持人员或软件包供应商。操作:ca.UninstallPrevious,位置:RunDll32 C:\ PROGRA〜1 \ COMMON〜1 \ INSTAL〜1 \ PROFES〜1 \ RunTime \ 10 \ 01 \ Intel32 \ Ctor.dll,LaunchSetup“C:\ Program Files \ InstallShield安装信息{GUID} \ setup.exe“-l0x9 -removeonly,命令:

任何人看到我在做什么错在这里?

问候
雷夫

回答

5

我没有申请重新包装好几年大陆航空公司在那里我做了SMS推向18000座森林。我经常在野外使用遗留的应用程序,这些应用程序未使用MSI安装,需要使用MSI重新部署,一旦完成,我支持将来进行重大升级。

这些以前部署的应用程序通常具有非常破碎和不正确的卸载程序。我将使用SMS来查询森林以获取所有已部署的版本,而不是调用这些。然后,我会将这些旧软件包部署到一个集成实验室,并计算出每个安装程序对该机器所做的事情,并编写自己的聚合“强制清理”自定义操作,该操作能够将各种版本的应用程序从机器上清除。

我在CostInitialize之前执行了这个自定义操作,这样当新的MSI执行成本时,它不会受到机器上不再存在的废话的影响。这对我来说很合适,因为我将软件包推送为System,而且我不必担心提升问题。如果你想完全符合UAC,你需要从prereq包中运行这个自定义代码,并让你的用户手动运行它,或者将它连接到引导程序之前,在你的MSI之前运行。

2

经过一个良好的夜间睡眠,我发现我的错误。 如果你真的http://wix.sourceforge.net/manual-wix3/wix_xsd_customaction.htm答案就在那里。

我试图做一个类型50自定义操作,启动已安装在系统上的可执行文件。

物业指定的完整路径的可执行文件来启动

ExeCommand规定了高于这个可执行程序的命令行参数。

而我的错在于我没有将完整的exe +命令行放在Property字段中。

/L

+1

你可以发布代码,得到这个工作吗? – JProgrammer 2010-09-29 05:54:47