Web services MSI安装上的.NET 4.0升级错误-XML不包含预期的属性错误

Web services MSI安装上的.NET 4.0升级错误-XML不包含预期的属性错误,web-services,.net-4.0,windows-services,windows-installer,vdproj,Web Services,.net 4.0,Windows Services,Windows Installer,Vdproj,我们有一个MSI在客户端机器上安装windows服务。 Windows服务调用服务器的web服务来执行操作。 最初,MSI和web服务都是使用.NET2.0框架构建的 上个季度,我们将系统升级到.NET 4.0。虽然我们的web服务仍然是ASP.NET,即asmx,而不是WCF。我还将Framework4.0设置为MSI安装的先决条件 我们的一位客户报告了此问题: 客户端使用的是.NETFramework2.0,系统中安装了旧版本的MSI。 当他试图安装MSI的.NET framework 4.

我们有一个MSI在客户端机器上安装windows服务。 Windows服务调用服务器的web服务来执行操作。 最初,MSI和web服务都是使用.NET2.0框架构建的

上个季度,我们将系统升级到.NET 4.0。虽然我们的web服务仍然是ASP.NET,即asmx,而不是WCF。我还将Framework4.0设置为MSI安装的先决条件

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

客户端使用的是.NETFramework2.0,系统中安装了旧版本的MSI。 当他试图安装MSI的.NET framework 4.0版本时,由于先决条件,系统提示他安装framework 4.0。框架安装完成后,他试图安装MSI,但出现了此错误。有人能给我介绍一下这个决议吗。如果需要,我可以提供详细信息

编辑1:

经过进一步研究,我发现它是我的AppName.installstate文件。卸载将删除此文件,但升级不会执行此操作。该文件位于安装目录中。仔细看,我可以在文件内容中看到。任何指示都将不胜感激

编辑2:

自定义操作安装将创建AppName.installstate文件,自定义操作卸载将删除该文件。在我的情况下,我正在做一个MSI升级,它不会对这个文件做任何事情。当我比较手动安装的2.0和4.0版本的installstate文件时,我发现XML语法、模式和内容存在巨大差异,原因是,我发现了序列化错误。现在我需要知道为什么AppName.installstate在升级时没有被覆盖。谷歌做了很多事,但什么地方都没有。
查看了MSI安装日志,但没有有用的信息。

根据1001错误消息,此错误消息与安装程序无关。问题完全在您的服务范围内

您的服务的OnStart方法应该什么都不做,只是启动后台进程,并尽快将successstart返回给服务控制管理器。关键路径中不应该有任何长时间运行的代码,因为SCM只会等待很长时间,然后才会假设启动服务时出错

重构服务以在另一个线程上运行作业,安装将成功安装。从那里,您可以关注反序列化过程中发生的真正问题。

Eureka

我找到了解决问题的办法

问题的根本原因: MSI在安装应用程序_name.installstate期间生成一个XML文件,该文件存储MSI在安装、卸载和回滚期间使用的信息。此XML文件的格式在.NET 2.0和.NET 4.0之间完全不同,即使用VS2005和VS2010开发的MSI。 由于4.0 frmaework无法理解旧框架版本2.0生成的文件,因此我们收到的错误是“无法序列化Installstate文件的类型”。 虽然没有在线文档可供使用,但我发现有此讨论>

我尝试过的解决方案我称之为“解决方案”: 在安装新版本的过程中,我将显式地用新格式4.0替换旧的XML文件。i、 e我的软件包中包含了由新版本生成的application_Name.installstate文件,因此它在升级时重写了旧文件。 MSI已安装,没有任何错误,并且正在成功运行


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

服务正是您在此处提到的所有内容。这项服务绝对没有问题,因为它以前也工作得很好。这个问题在我从2.0升级到4.0之后才开始出现。升级包括windows服务、web服务和安装/部署项目。windows Installer不生成installstate文件。服务中的Installer类/InstallUtil自定义操作。