使用 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 中赋值构造函数和复制构造函数之间的区别 是这样的 class A public A cout lt lt A A lt lt endl The copy constructor A a b The assignment cons
  • Mono 无法保存用户设置

    我在 Mono Ubuntu 上保存用户设置时遇到问题 这是代码示例 private void Form1 Load object sender EventArgs e string savedText Properties Setting
  • 捕获 foreach 条件中抛出的异常

    我有一个foreach在 foreach 本身的条件下循环期间中断的循环 有没有办法try catch抛出异常然后继续循环的项 这将运行几次 直到异常发生然后结束 try foreach b in bees exception is in
  • 通信对象 System.ServiceModel.Channels.ServiceChannel 不能用于通信

    通信对象System ServiceModel Channels ServiceChannel 无法用于通信 因为它处于故障状态 这个错误到底是什么意思 我该如何解决它 您收到此错误是因为您让服务器端发生 NET 异常 并且您没有捕获并处理
  • 在 C++11 中省略返回类型

    我最近发现自己在 C 11 模式下的 gcc 4 5 中使用了以下宏 define RETURN x gt decltype x return x 并编写这样的函数 template
  • std::map 和二叉搜索树

    我读过 std map 是使用二叉搜索树数据结构实现的 BST 是一种顺序数据结构 类似于数组中的元素 它将元素存储在 BST 节点中并按其顺序维护元素 例如如果元素小于节点 则将其存储在节点的左侧 如果元素大于节点 则将其存储在节点的右侧
  • TextBox 焦点的 WinForms 事件?

    我想添加一个偶数TextBox当它有焦点时 我知道我可以用一个简单的方法来做到这一点textbox1 Focus并检查布尔值 但我不想那样做 我想这样做 this tGID Focus new System EventHandler thi
  • 为什么密码错误会导致“填充无效且无法删除”?

    我需要一些简单的字符串加密 所以我编写了以下代码 有很多 灵感 来自here http www codeproject com KB security DotNetCrypto aspx create and initialize a cr
  • 如何用 kevent() 替换 select() 以获得更高的性能?

    来自Kqueue 维基百科页面 http en wikipedia org wiki Kqueue Kqueue 在内核和用户空间之间提供高效的输入和输出事件管道 因此 可以修改事件过滤器以及接收待处理事件 同时每次主事件循环迭代仅使用对
  • 禁用 LINQ 上下文的所有延迟加载或强制预先加载

    我有一个文档生成器 目前包含约 200 个项目的查询 但完成后可能会超过 500 个 我最近注意到一些映射表示延迟加载 这给文档生成器带来了一个问题 因为它需要根据生成的文档来访问所有这些属性 虽然我知道DataLoadOptions可以指
  • C# 编译器如何决定发出可重定向的程序集引用?

    NET Compact Framework 引入了可重定向程序集引用 现在用于支持可移植类库 基本上 编译器会发出以下 MSIL assembly extern retargetable mscorlib publickeytoken 7C
  • UWP 无法在两个应用程序之间创建本地主机连接

    我正在尝试在两个 UWP 应用程序之间设置 TCP 连接 当服务器和客户端在同一个应用程序中运行时 它可以正常工作 但是 当我将服务器部分移动到一个应用程序并将客户端部分移动到另一个应用程序时 ConnectAsync 会引发异常 服务器未
  • 通过等待任务或访问其 Exception 属性都没有观察到任务的异常

    这些是我的任务 我应该如何修改它们以防止出现此错误 我检查了其他类似的线程 但我正在使用等待并继续 那么这个错误是怎么发生的呢 通过等待任务或访问其 Exception 属性都没有观察到任务的异常 结果 未观察到的异常被终结器线程重新抛出
  • 过期时自动重新填充缓存

    我当前缓存方法调用的结果 缓存代码遵循标准模式 如果存在 则使用缓存中的项目 否则计算结果 在返回之前将其缓存以供将来调用 我想保护客户端代码免受缓存未命中的影响 例如 当项目过期时 我正在考虑生成一个线程来等待缓存对象的生命周期 然后运行
  • 如何在 GCC 5 中处理双 ABI?

    我尝试了解如何克服 GCC 5 中引入的双重 ABI 的问题 但是 我没能做到 这是一个重现错误的非常简单的示例 我使用的GCC版本是5 2 如您所见 我的主要函数 在 main cpp 文件中 非常简单 main cpp include
  • 过度使用委托对性能来说是一个坏主意吗? [复制]

    这个问题在这里已经有答案了 考虑以下代码 if IsDebuggingEnabled instance Log GetDetailedDebugInfo GetDetailedDebugInfo 可能是一个昂贵的方法 因此我们只想在调试模式
  • 以编程方式使用自定义元素创建网格

    我正在尝试以编程方式创建一个网格 并将自定义控件作为子项附加到网格中 作为 2x2 矩阵中的第 0 行第 0 列 为了让事情变得更棘手 我使用了 MVVM 设计模式 下面是一些代码可以帮助大家理解这个想法 应用程序 xaml cs base
  • 在基类集合上调用派生方法

    我有一个名为 A 的抽象类 以及实现 A 的其他类 B C D E 我的派生类持有不同类型的值 我还有一个 A 对象的列表 abstract class A class B class A public int val get privat
  • Swagger 为 ASP.CORE 3 中的字典生成错误的 URL

    当从查询字符串中提取的模型将字典作为其属性之一时 Swagger 会生成不正确的 URL 如何告诉 Swagger 更改 URL 中字典的格式或手动定义输入参数模式而不自动生成 尝试使用 Swashbuckle 和 NSwag 控制器 pu
  • 如何使用 std::array 模拟 C 数组初始化“int arr[] = { e1, e2, e3, ... }”行为?

    注意 这个问题是关于不必指定元素数量并且仍然允许直接初始化嵌套类型 这个问题 https stackoverflow com questions 6111565 now that we have stdarray what uses are

随机推荐

  • 带有变量的 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 并成功手动启动应用程序 所以我知道这不