1

我们有一个MSI在客户机上安装Windows服务。 Windows服务调用我们的服务器的Web服务来执行操作。 最初,MSI和Web服务都是使用.NET 2.0框架构建的。MSI安装.NET 4.0升级错误 - XML不包含预期的属性错误

上个季度我们将系统升级到.NET 4.0。虽然我们的W​​eb服务仍然是ASP.NET,即asmx(而不是WCF)。此外,我确实将框架4.0设置为MSI安装的先决条件。

我们的一个客户报告此问题:

客户端是使用.NET Framework 2.0,并且有安装在他的系统旧版本的MSI的。 当他试图安装MSI的.NET框架4.0版本时,系统提示您安装框架4.0(由于先决条件)。一旦框架安装完成,他试图安装MSI并得到这个错误。有人能指导我解决问题吗?如有需要,我可以提供详情。

Error while upgrading to 4.0 MSI

编辑1:

在更多的研究,我发现这是我AppName.installstate文件。卸载会删除此文件,但升级不会。该文件位于安装目录中。仔细一看,我可以在文件内容中看到“http://schemas.xmlsoap.org/soap/envelope/:Envelope”。任何指针将不胜感激。

编辑2:

自定义操作安装创建AppName.installstate文件和自定义操作卸载删除该文件。就我而言,我正在进行MSI升级,对此文件不做任何处理。当我比较2.0和4.0的installstate文件(都是手动安装的)时,我可以看到XML语法,模式和内容的巨大差异,原因是,我得到序列化错误。现在我需要知道为什么AppName.installstate在升级时不会被覆盖。做很多谷歌,但没有登陆。 看着MSI安装日志,但没有有用的信息。

回答

1

尤里卡!!!!

我找到了解决我的问题。问题的

根源: MSI生成在安装过程中(application_name.installstate)的XML文件,其存储信息MSI用途期间安装,卸载,回滚。这个XML文件的格式在.NET 2.0和.NET 4.0之间完全不同,也就是使用VS2005和VS2010开发的MSI。 因为4。0 frmaework无法理解Old Framework版本(2.0)生成的文件,我们收到错误消息:“无法序列化Installstate文件的类型”。 虽然没有在网上提供的该文件,有这个讨论中,我发现>http://social.msdn.microsoft.com/Forums/en-US/winformssetup/thread/bedbb8bd-dad5-4bcb-a87a-ac69386669b4/

解决方案我想(我称之为变通): 安装新版本的过程中,我明确地新老交替具有新格式的XML文件(4.0)。即我在我的软件包中包含了application_Name.installstate文件(由新版本生成),因此它在升级时覆盖了旧文件。 MSI安装没有任何错误,并且正在成功运行。

如果有人需要关于问题和解决方案的详细信息,请回复此处。

+1

Windows Installer *不会*生成installstate文件。安装程序类/ InstallUtil自定义操作(在您的服务中)执行。 – 2017-07-18 11:15:32

-1

此错误消息与安装程序根据1001错误消息无关。问题完全在你的服务中。

您的服务的OnStart方法应该除了启动后台进程并尽快将成功启动返回到服务控制管理器外。在关键路径中不应该有任何长时间运行的代码,因为SCM只会在假设启动服务时出现错误之前等待很长时间。

重构您的服务以在另一个线程上运行作业,并且安装将成功安装。从那里你可以专注于你的DeSerialization过程中发生的实际问题。

+0

服务准确地做你在这里提到的所有事情。这项服务绝对没有问题,因为它以前也能很好地工作。只有在我从2.0升级到4.0之后,问题才开始显现。升级包括Windows服务,Web服务和安装/部署项目。 – 2012-02-16 06:46:17