使用 WiX 进行重大升级后无法启动 Windows 服务

2024-04-06

我有一个非常简单的 WiX 项目。没有什么花哨。当尝试对现有安装执行 MajorUpgrade 时,无法启动服务,并且不可避免地会回滚到以前的版本并正常启动服务。我已经删除了Start="install"并成功手动启动应用程序,所以我知道这不是依赖问题。

我无休止地搜索,但没有找到我的问题的答案。

<MajorUpgrade DowngradeErrorMessage="A newer version of [ProductName] is already installed." Schedule="afterInstallFinalize" />

我的服务安装:

<ServiceInstall
        Id="ServiceInstaller"
        Type="ownProcess"
        Name="LsdnService"
        DisplayName="Lsdn Service"
        Description="Placeholder for now."
        Start="auto"
        Account="[SERVICEACCOUNT]"
        Password="[SERVICEPASSWORD]"
        ErrorControl="normal"/>
<ServiceControl Id="StartService" Start="install" Stop="both" Remove="uninstall" Name="LsdnService" Wait="yes" />

我将 MSI 日志转储到一个文件中并收到此错误,但它非常模糊。

MSI (s) (18:48) [22:41:27:349]: Note: 1: 2205 2:  3: Error 
MSI (s) (18:48) [22:41:27:349]: Note: 1: 2228 2:  3: Error 4: SELECT `Message` FROM `Error` WHERE `Error` = 1920 

安装过程中会有一些注册表修改。安装程序尝试从注册表中读取并继承已存在的值。

<Property Id="LSDNADDRESS" Value="127.0.0.1">
  <RegistrySearch Id="LsdnAddressProperty" Root="HKLM" Key="$(var.RegistryKey)" Name="LsdnAddress" Type="raw" />
</Property>
<Property Id="LSDNPORT" Value="9920">
  <RegistrySearch Id="LsdnPortProperty" Root="HKLM" Key="$(var.RegistryKey)" Name="LsdnPort" Type="raw" />
</Property>
<Property Id="LSDNKEY" Value="6f380b07-0b54-4904-8303-95d1ec45d453">
  <RegistrySearch Id="LsdnKeyProperty" Root="HKLM" Key="$(var.RegistryKey)" Name="LsdnKey" Type="raw" />
</Property>

调试结果:经过大量调试(由原始海报 - OP),这被证明是此处描述的已知 MSI 问题:https://wix-users.narkive.com/EMfQPDrM/a-bug-get-reg-sz-when-using-type-in​​teger https://wix-users.narkive.com/EMfQPDrM/a-bug-get-reg-sz-when-using-type-integer。很好的搜索工作。

DWORD 中包含什么? (a REG_SZ显然):本质上MSI“转换”DWORD通过a找到的值RegistrySearch对格式化字符串的操作 -REG_SZ- 升级期间 安装(也可能涉及更多)。这导致服务 期待一个DWORD在重大期间启动时价值会下降 升级。一个非常奇特的错误.

解决方法:可以尝试通过使服务代码能够读取两者来“解决”此问题DWORD and REG_SZ。 这产生了比在一个问题中解决问题更稳健的解决方案 自定义操作,因为只要代码存在,它就是“永久”修复 那里(并且代码的存在提醒其他开发人员注意 问题)。或者也许只使用REG_SZ?


Quick Checks: Check the service password and login - obviously. Anything in the Event Viewer? Windows Key + Tap R + eventvwr.msc + Enter. How to use the Event Viewer to troubleshoot problems with a Windows Service https://www.coretechnologies.com/blog/windows-services/event-viewer-troubleshoot-windows-services/. Perhaps you can try to do a folder diff on the before and after folders and see if you see something unexpected in the config files? Naturally there will be lots of binary differences, but check the text files (also encoding). Check the MSI log file again and search for "value 3" as described here: Tips For Checking MSI Log Files https://stackoverflow.com/questions/49026782/website-is-not-getting-created-in-iis-limited-edition-of-installshield/49028367#49028367. Manually copy the new files in place and attempt to start the service via the services.msc applet.


服务专家: Windows 服务常见问题解答 (FAQ) https://www.coretechnologies.com/WindowsServices/FAQ.html。内容似乎是最新的——至少从表面上看是这样。 这些人自称是服务专家。我不知道他们是谁 是。

看看在“错误”部分在上面的链接中。这里有一些 摘录:

  • 1053:服务没有及时响应启动或控制请求 https://www.coretechnologies.com/WindowsServices/FAQ.html#Error1053
  • 为什么我的 Windows 服务在重新启动后没有自动启动? https://www.coretechnologies.com/WindowsServices/FAQ.html#NotStartingAtBoot
  • 1069:由于登录失败,服务未启动 https://www.coretechnologies.com/WindowsServices/FAQ.html#Error1069

通用检查表:如果以上都不起作用,也许可以尝试这些"torpedoes full spread" check-lists(只是开始调试的想法):

  • 在客户端系统中安装后桌面应用程序无法打开 https://stackoverflow.com/questions/53512998/desktop-applicaton-not-opening-after-installation-in-client-system/53530377#53530377
  • Windows 应用程序启动错误异常代码:0xe0434352 https://stackoverflow.com/questions/49623588/windows-application-startup-error-exception-code-0xe0434352/49637913#49637913

通用调试:引入一些通用的调试方法。

  • 自定义操作调试: WIxsharp 在控制台中调试自定义操作 https://stackoverflow.com/questions/52878332/wixsharp-debug-custom-action-in-console/52880033#52880033
  • 依赖关系扫描: 哪些winform项目文件应该打包到安装程序中 https://stackoverflow.com/questions/51939079/which-winform-project-files-should-be-packed-up-into-the-installer

一些进一步的链接:

  • C# 调试文件夹复制到其他位置时不会运行 exe https://stackoverflow.com/questions/48075972/c-sharp-debug-folder-when-copied-to-another-location-does-not-run-the-exe
  • wix服务安装权限不够 https://stackoverflow.com/questions/51768425/wix-service-install-not-enough-permission
  • WiX“服务安装”内部到底是如何工作的? https://stackoverflow.com/questions/49801518/how-exactly-does-the-wix-service-install-work-internally/49802335#49802335
  • WiX 工具集 PermissionEx 问题 - 应用程序安装后无法运行 https://stackoverflow.com/questions/53354907/wix-toolset-permissionex-problem-app-does-not-run-after-installation/53364536#53364536
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 WiX 进行重大升级后无法启动 Windows 服务 的相关文章

  • 结构化绑定中缺少类型信息

    我刚刚了解了 C 中的结构化绑定 但有一件事我不喜欢 auto x y some func is that auto正在隐藏类型x and y 我得抬头看看some func的声明来了解类型x and y 或者 我可以写 T1 x T2 y
  • C# 异步等待澄清?

    我读了here http blog stephencleary com 2012 02 async and await html that 等待检查等待的看看它是否有already完全的 如果 可等待已经完成 那么该方法将继续 运行 同步
  • 根据属性的类型使用文本框或复选框

    如果我有这样的结构 public class Parent public string Name get set public List
  • 通过引用传递 [C++]、[Qt]

    我写了这样的东西 class Storage public Storage QString key const int value const void add item QString int private QMap
  • std::vector 与 std::stack

    有什么区别std vector and std stack 显然 向量可以删除集合中的项目 尽管比列表慢得多 而堆栈被构建为仅后进先出的集合 然而 堆栈对于最终物品操作是否更快 它是链表还是动态重新分配的数组 我找不到关于堆栈的太多信息 但
  • 随着时间的推移,添加到 List 变得非常慢

    我正在解析一个大约有 1000 行的 html 表 我从一个字符串中添加 10 个字符串 td 每行到一个list td
  • free 和 malloc 在 C 中如何工作?

    我试图弄清楚如果我尝试 从中间 释放指针会发生什么 例如 看下面的代码 char ptr char malloc 10 sizeof char for char i 0 i lt 10 i ptr i i 10 ptr ptr ptr pt
  • 传递给函数时多维数组的指针类型是什么? [复制]

    这个问题在这里已经有答案了 我在大学课堂上学习了 C 语言和指针 除了多维数组和指针之间的相似性之外 我认为我已经很好地掌握了这个概念 我认为由于所有数组 甚至多维 都存储在连续内存中 因此您可以安全地将其转换为int 假设给定的数组是in
  • 如何从本机 C(++) DLL 调用 .NET (C#) 代码?

    我有一个 C app exe 和一个 C my dll my dll NET 项目链接到本机 C DLL mynat dll 外部 C DLL 接口 并且从 C 调用 C DLL 可以正常工作 通过使用 DllImport mynat dl
  • 从经典 ASP 调用 .Net C# DLL 方法

    我正在开发一个经典的 asp 项目 该项目需要将字符串发送到 DLL DLL 会将其序列化并发送到 Zebra 热敏打印机 我已经构建了我的 DLL 并使用它注册了regasm其次是 代码库这使得 IIS 能够识别它 虽然我可以设置我的对象
  • -webkit-box-shadow 与 QtWebKit 模糊?

    当时有什么方法可以实现 webkit box shadow 的工作模糊吗 看完这篇评论错误报告 https bugs webkit org show bug cgi id 23291 我认识到这仍然是一个问题 尽管错误报告被标记为RESOL
  • 如何连接重叠的圆圈?

    我想在视觉上连接两个重叠的圆圈 以便 becomes 我已经有部分圆的方法 但现在我需要知道每个圆的重叠角度有多大 但我不知道该怎么做 有人有主意吗 Phi ArcTan Sqrt 4 R 2 d 2 d HTH Edit 对于两个不同的半
  • 无限循环与无限递归。两者都是未定义的吗?

    无副作用的无限循环是未定义的行为 看here https coliru stacked crooked com view id 24e0a58778f67cd4举个例子参考参数 https en cppreference com w cpp
  • 访问外部窗口句柄

    我当前正在处理的程序有问题 这是由于 vista Windows 7 中增强的安全性引起的 特别是 UIPI 它阻止完整性级别较低的窗口与较高完整性级别的窗口 对话 就我而言 我想告诉具有高完整性级别的窗口进入我们的应用程序 它在 XP 或
  • 结构体的内存大小不同?

    为什么第一种情况不是12 测试环境 最新版本的 gcc 和 clang 64 位 Linux struct desc int parts int nr sizeof desc Output 16 struct desc int parts
  • 空指针与 int 等价

    Bjarne 在 C 编程语言 中写道 空指针与整数零不同 但 0 可以用作空指针的指针初始值设定项 这是否意味着 void voidPointer 0 int zero 0 int castPointer reinterpret cast
  • 为什么C++代码执行速度比java慢?

    我最近用 Java 编写了一个计算密集型算法 然后将其翻译为 C 令我惊讶的是 C 的执行速度要慢得多 我现在已经编写了一个更短的 Java 测试程序和一个相应的 C 程序 见下文 我的原始代码具有大量数组访问功能 测试代码也是如此 C 的
  • C++ 中的参考文献

    我偶尔会在 StackOverflow 上看到代码 询问一些涉及函数的重载歧义 例如 void foo int param 我的问题是 为什么会出现这种情况 或者更确切地说 你什么时候会有 对参考的参考 这与普通的旧参考有何不同 我从未在现
  • MySQL Connector C/C API - 使用特殊字符进行查询

    我是一个 C 程序 我有一个接受域名参数的函数 void db domains query char name 使用 mysql query 我测试数据库中是否存在域名 如果不是这种情况 我插入新域名 char query 400 spri
  • 指针和内存范围

    我已经用 C 语言编程有一段时间了 但对 C 语言还是很陌生 有时我对 C 处理内存的方式感到困惑 考虑以下有效的 C 代码片段 const char string void where is this pointer variable l

随机推荐

  • 带有变量的 jQuery 选择器

    如何将变量与选择器混合使用 我有 ID 变量 我想从 div one 中选择具有此 id 的图像 jQuery one img id 是选择器 我试过了 one img id 但不起作用 编辑 根据您下面的评论 您将使用此 one img
  • 调试时 Visual Studio 不会因未处理的异常而中断

    突然我的visual studio不会因未处理的异常而中断 有时甚至不会在断点处停止 我读过许多其他相关的 SO 帖子 如下所示 如何使 Visual Studio 仅在未处理的异常上中断 https stackoverflow com q
  • 数据类:如何使用 asdict() 忽略 None 值?

    dataclass class Car brand str color str 如何获得忽略 None 值的字典 就像是 gt gt gt car Car brand Audi color None gt gt gt asdict car
  • 在 R 中绘制 x 轴上包含日期的图表

    我正在尝试在 x 轴上绘制日期 间隔为 1 个月 并旋转日期值以确保清晰 r runif 100 d lt as Date 2001 1 1 70 sort r plot d r type l xaxt n axis Date 1 at s
  • 从 Julia 程序执行 >> shell 运算符

    我试图使用反引号从 Julia 内部附加一个文件 run cat file2 gt gt file1 但这行不通 似乎 gt gt 运算符无法正确解释 有没有办法通过管道或其他技巧来做到这一点 如果您尝试以编程方式执行此操作 则主要问题正文
  • Numpy:给定索引,如何以有效的方式消除沿 axis=1 的最小值?

    给定一个形状为 A 的矩阵 1000000 6 我已经弄清楚如何获取每行的最小最右边值并在此函数中实现它 def calculate row minima indices h h is the given matrix Returns th
  • Spring Boot - 非 Web 应用程序的长时间运行应用程序

    我有一个简单的 Spring Boot 应用程序 仅使用 AMQP 依赖项 仅 org springframework boot spring boot starter amqp 例如没有 Web 依赖项 因此 JAR 中不包含应用程序服务
  • Django 过滤器调用返回的列表的默认顺序是什么?

    简短的问题连接到 PostgreSQL 数据库时 Django 过滤器调用返回的列表的默认顺序是什么 背景我自己承认 我had在应用程序层做了一个糟糕的假设 即返回列表的顺序将是恒定的 即不使用 order by 我查询的项目列表不按字母顺
  • 自动化时的 PowerShell 和 Excel 问题

    我面临着一个奇怪的问题 当我运行这段代码时 Excel New Object Com Excel Application book Excel Workbooks Add threading thread CurrentThread Cur
  • SpringBoot Undertow:如何分派到工作线程

    我目前正在查看 springboot undertow 对我来说 不太清楚如何将传入的 http 请求分派到工作线程以阻止操作处理 看着班级Undertow 嵌入式 Servlet Container class 看起来没有办法实现这种行为
  • 如何从PDO PHP 中的prepare() 获取查询错误?

    st db gt prepare SELECT FROM c6ode 在上述情况下 如何检查查询的故意 mysql 错误 需要设置错误模式属性PDO ATTR ERRMODE to PDO ERRMODE EXCEPTION 因为您期望异常
  • C 中 scanf 函数的格式说明符中 %c 规范之前的空格

    当我之间不包含空格时 d and c格式字符串中的规范scanf 在以下程序中运行函数 并在运行时输入 4 h 则输出为 Integer 4 and Character 究竟如何可变 c 在这种情况下接受输入 如果我在之间包含空格 会有什么
  • 在Google搜索时如何从第一页获取图像?

    通常使用Google搜索城市后 右侧会出现维基百科页面的一部分 其中包含图像和地图 谁能告诉我如何访问该图像 我应该知道怎么下载 实际上 主图像 与右侧地图图像一起 很少来自维基百科 因此您无法使用维基百科 API 来获取它 如果您想访问实
  • 在 GridView 或 ListView 底部添加额外空间

    是否可以在 GridView 底部添加额外的空间 有点像空行 我希望当你向下滚动到 GridView 底部时 会有额外的 50dp 的空白空间 我尝试设置paddingBottom到50dp 但似乎没有改变任何东西 如果我理解正确的话 它应
  • Grails - SpringSecurityPlugin 不生成控制器

    我是 Grails 新手 我按照说明安装 SpringSecurityPlugin 版本 2 0 RC2 并执行命令 grails s2 quickstart 用户角色 应该在其他文件中生成 登录控制器 and 注销控制器 但这些控制器不会
  • Kafka - 如何捕获kafka客户端后台线程生成的消息

    使用以下配置来模拟消费者关闭 会话超时 我们如何捕获客户端记录到控制台的消息 SESSTMOUT rdkafka consumer 1 第三 主要 consumed message None msg1 0 first topic 0 Non
  • 如何让编译日志在Emacs中创建一个新窗口?

    如果我在 emacs 中只显示一个窗口并使用 M x 编译 则该窗口会一分为二 我可以轻松查看编译缓冲区 但是 如果我显示更多窗口 编译日志就会接管其他窗口之一 这让我感到恼火 如何让emacs始终分割一个新窗口来显示编译日志 编辑 从我一
  • 主要和次要刻度线风格不同,整个页面覆盖D3?

    我想绘制一个带有主要和次要刻度的轴 以不同的方式覆盖我的整个页面 我遵循的结构this https stackoverflow com questions 19242674 major and minor ticks with v3 of
  • 访问数据转换问题

    我正在使用 Access 2003 有一个表 其中文本数据列中包含一些日期值 如下所示 May 97 Jun 99 Jun 00 Sep 02 Jan 04 我需要将它们转换为正确的日期格式并转换为另一个日期 时间列 因此创建一个新的日期
  • 使用 WiX 进行重大升级后无法启动 Windows 服务

    我有一个非常简单的 WiX 项目 没有什么花哨 当尝试对现有安装执行 MajorUpgrade 时 无法启动服务 并且不可避免地会回滚到以前的版本并正常启动服务 我已经删除了Start install 并成功手动启动应用程序 所以我知道这不