Wix 安装程序:已安装的服务在启动时无法读取 HKLM 注册表项

2023-12-07

我正在使用 wix 工具 3.11 创建一个安装服务的 msi。安装程序运行自定义操作并将变量返回到 wix 以写入注册表 (HKLM)。该服务启动并尝试读取注册表,但无法完成并且失败。如果我手动编写注册表,安装程序将完美运行。

msi 日志中的错误消息:

Product: Installer-- Error 1920. Service 'XPTO Server' (xpto_server) failed to start.  Verify that you have sufficient privileges to start system services.

我的 Wix XML:

<Package InstallerVersion="200" Compressed="yes" InstallScope="perMachine" InstallPrivileges="elevated" />
...
<ComponentGroup Id="ProductComponents" Directory="INSTALLFOLDER">
  <Component Id="CMP_RegistryEntries" Guid="xxxxxxxxx" >
    <RegistryKey Root="HKLM" Key="SOFTWARE\XPTOInc\XPTO\XPTOServer\BetaVersion">
      <RegistryValue Name="token" Action="write" Value="[TOKEN]" Type="string" KeyPath="yes" />
      <RegistryValue Name="[IDENTIFIER_TYPE]" Action="write" Value="[INSTALLEDID]" Type="string" />
      <RegistryValue Name="installDir" Action="write" Value="[INSTALLFOLDER]" Type="string" />
    </RegistryKey>
  </Component>
  <Component Id="CMP_XPTOServerEXE" Guid="xxxxxx">
    <File Id="FILE_XPTOServerEXE" Name="xpto-server.exe" Source="Work\xpto-server.exe" KeyPath="yes" />
    <ServiceInstall Id="InstallExporterService" Name="xpto_server" DisplayName="XPTO Server" Description="Read data from Registry and do simple stuff" ErrorControl="normal" Start="auto" Type="ownProcess" />
    <ServiceControl Id="ServiceStateControl" Name="xpto_server" Remove="uninstall" Start="install" Stop="both" />
  </Component>
</ComponentGroup>

编辑:当我手动将变量写入注册表时,该服务使用 msi pkg 安装或使用 sc.exe 运行

编辑2:下面是设置注册表然后启动服务的日志

MSI (s) (70:74) [15:40:37:560]: Created Custom Action Server with PID 16808 (0x41A8).
MSI (s) (70:E4) [15:40:37:613]: Running as a service.
MSI (s) (70:E4) [15:40:37:615]: Hello, I'm your 32bit Elevated Non-remapped custom action server.
MSI (s) (70:38) [15:40:37:973]: Executing op: ActionStart(Name=WriteRegistryValues,Description=Writing system registry values,Template=Key: [1], Name: [2], Value: [3])
Action 15:40:37: WriteRegistryValues. Writing system registry values
MSI (s) (70:38) [15:40:37:974]: Executing op: ProgressTotal(Total=3,Type=1,ByteEquivalent=13200)
MSI (s) (70:38) [15:40:37:975]: Executing op: RegOpenKey(Root=-2147483646,Key=SOFTWARE\XPTOInc\XPTO\XPTOServer\BetaVersion,,BinaryType=0,,)
MSI (s) (70:38) [15:40:37:975]: Executing op: RegAddValue(Name=token,Value=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx,)
WriteRegistryValues: Key: \SOFTWARE\XPTOInc\XPTO\XPTOServer\BetaVersion, Name: token, Value: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
MSI (s) (70:38) [15:40:37:976]: Executing op: RegAddValue(Name=envId,Value=xxxxxxxxxxxxxxxxxxxxxxxx,)
WriteRegistryValues: Key: \SOFTWARE\XPTOInc\XPTO\XPTOServer\BetaVersion, Name: envId, Value: xxxxxxxxxxxxxxxxxxxxxxxxx
MSI (s) (70:38) [15:40:37:976]: Executing op: RegAddValue(Name=installDir,Value=C:\Program Files (x86)\XPTOInc\XPTO\XPTO Server Beta\,)
WriteRegistryValues: Key: \SOFTWARE\XPTOInc\XPTO\XPTOServer\BetaVersion, Name: installDir, Value: C:\Program Files (x86)\XPTOInc\XPTO\XPTO Server Beta\
MSI (s) (70:38) [15:40:37:977]: Executing op: ActionStart(Name=InstallServices,Description=Installing new services,Template=Service: [2])
Action 15:40:37: InstallServices. Installing new services
MSI (s) (70:38) [15:40:37:977]: Executing op: ProgressTotal(Total=1,Type=1,ByteEquivalent=1300000)
MSI (s) (70:38) [15:40:37:978]: Executing op: ServiceInstall(Name=xpto_server,DisplayName=XPTOServer,ImagePath="C:\Program Files (x86)\XPTOInc\XPTO\XPTO Server Beta\xpto-server.exe",ServiceType=16,StartType=2,ErrorControl=1,,Dependencies=[~],,,Password=**********,Description=Read data from Registry and do simple stuff,,)
InstallServices: Service: 
MSI (s) (70:38) [15:40:37:980]: Executing op: ActionStart(Name=StartServices,Description=Starting services,Template=Service: [1])
Action 15:40:37: StartServices. Starting services
MSI (s) (70:38) [15:40:37:981]: Executing op: ProgressTotal(Total=1,Type=1,ByteEquivalent=1300000)
MSI (s) (70:38) [15:40:37:981]: Executing op: ServiceControl(,Name=xpto_server,Action=1,,)
StartServices: Service: XPTO Server
Error 1920. Service 'XPTO Server' (xpto_server) failed to start.  Verify that you have sufficient privileges to start system services.

Solution:本例中的问题是由于 32 位/64 位问题,在注册表中的预期位置找不到注册表项。

  • 64 位部分: HKEY_LOCAL_MACHINE\SOFTWARE\Company\App - MyValue
  • 32位部分: HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Company\App - MyValue

回答结束。不过,将调试工作保留在下面:


Round 1:

也许尝试阅读这两个最近的答案并检查是否有任何提示:

  • Wix 服务安装程序有时无法安装或启动
  • Wix - ServiceControl 启动需要四分钟才能失败,应该是 30 秒

What does it say in the event viewer? (Windows + R eventvwr and OK)


Round 2:

  • Bitness: Are you sure you are reading from the right location in the registry? Are you installing a 32-bit MSI or a 64-bit MSI? (looks like 32-bit)
    • 64 位部分: HKEY_LOCAL_MACHINE\SOFTWARE\Company\App
    • 32位部分: HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Company\App
  • 权限: 你检查了吗权限对于您的安装程序写入的注册表项和值regedit.exe检查?Right click => Permissions(必须问)。
  • 特权: 您使用什么帐户来运行该服务?它看起来有点像标准的本地系统?该帐户需要SeService登录权限特权。有关详细信息,请参阅上面部分的第二行。
  • Logging: 你用吗log4net或者您的服务中的其他日志记录功能?你尝试过吗详细、调试 MSI 日志记录在顶部的第一个链接中找到?
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Wix 安装程序:已安装的服务在启动时无法读取 HKLM 注册表项 的相关文章

  • 使用WiX安装后是否可以提示重启机器?

    使用WiX安装后是否可以提示重启机器
  • Burn(WiX bootstrapper)不会卸载MSI包

    我有一个包含此链的 Burn 捆绑包
  • 在 Wix 安装程序中以管理员模式运行 customAction 中的 ExeCommand

    我是 wix 安装程序的新手 我已经为我的应用程序使用 wix 安装程序开发了一个设置 我需要执行自定义操作来运行 cmd exe 中的命令 XP 下运行正常 但在 Windows 8 和 7 中 cmd 提示符需要以管理员身份运行 我用谷
  • 不使用 powershell 远程安装 .msi?

    我们有一个多服务器系统我们需要在客户端安装 我想编写一个脚本 可以 关闭远程机器上的服务 卸载多台远程计算机上的软件 在多个远程计算机上安装 msi 文件 我曾挣扎过psexec and wmic做第 2 点和第 3 点 似乎必须有一种更简
  • 无法再卸载 Visual Studio 2017

    我在运行最新的 VS2017 时遇到了严重的问题 因为在我升级它时它进入了不一致的状态 有一些残留的软件包拒绝卸载 因为它们显然缺少来自的缓存文件C Windows Installer文件夹 我从来没有碰过那个文件夹 然而 我确实移动了C
  • 使用 WiX 进行重大升级后无法启动 Windows 服务

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

    我有以下 wxs 文件
  • 使用自定义操作卸载多个产品

    我正在为我们的产品开发基于 WIX 的安装程序 该产品有一个基础产品和许多插件 基础版和插件将作为单独的 MSI 提供 仅当底座可用时才能安装插件 基础和插件在根文件夹下共享公共文件夹树 例如 C Program files MyProdu
  • 如何使用 WiX 安装和启动 Windows 服务

    我尝试在 Wix 中使用下面的代码 但是在安装时 安装程 序在 正在启动服务 状态下冻结了大约 3 分钟 然后我收到此消息 Service Jobservice 无法启动 请验证您是否有足够的权限来启动系统服务 我的代码有什么错误吗 并且可
  • 如何在 Wix 自定义对话框的文本框中输入值?

    我有一个带有类型编辑控件的 Wix 对话框 这是服务所依赖的服务器的 uri 如何在输入值之前禁用 下一步 按钮 以下是我们曾经使用的一些 旧 生产代码的摘录
  • 获取生成的 ProductCode 作为 Wix 中的变量

    在我们的产品中我们使用Product Id 在 Wix 中告诉它为每个新版本生成新的产品代码 现在 我们需要在安装期间将正在安装的 MSI 的产品代码记录到我们的注册表项之一中 我们可以通过循环遍历 卸载 注册表项中的条目来查找产品名称和版
  • 如何编写自定义操作 DLL 以在 MSI 中使用?

    这是我打算自己回答的问题 但请随意添加其他方法来完成此任务 我正在打包一个应用程序以用于各种配置 并且我确定在 MSI 中执行自定义逻辑的最可靠方法是编写我自己的自定义操作 DLL 该 DLL 能够从 PROPERTY 表中读取 写入 终止
  • 使用 Visual Studio 安装项目设置 InstallPath 注册表项

    我正在使用使用 Visual Studio 安装项目设计的 msi 安装程序来部署我的应用程序 如何将注册表项设置为应用程序的安装路径 实际上 当我在寻找同样的东西时 还提到了以下解决方案 在注册表项中使用 TARGETDIR
  • 自定义 WiX Burn 引导程序用户界面?

    我主要使用 WiX 3 6 创建一个安装包 这样我就可以利用Burn http en wikipedia org wiki WiX Burn引导功能 到目前为止 我已经将多个 MSI 软件包捆绑在一起 这些软件包将与内置引导程序应用程序一起
  • 使用“Any CPU”而不是“X86”编译wix项目

    当我编译一个wix项目 并且wix通过MSbuild启动所有现有项目的编译时 我可以使用 任何CPU 而不是 X86 或 64位 吗 如果没有 我如何使用 任何CPU 编译项目 如果您的问题是是否可以编译 WIXPROJAny CPU那么答
  • WiX - 安装 Windows 服务以在 x64 模式下运行

    我正在使用 WiX 3 5 及其 ServiceInstall 标签安装 Windows 服务
  • 用于配置编辑的 wix 自定义对话框

    你好 我正在尝试使用 wix v3 为我的应用程序设置 msi 我对这项任务有疑问 我需要一个用户输入 该输入将存储在我的应用程序的配置文件中 例如 我需要一个用于 sql 连接字符串的对话框 并且用户输入将写入应用程序配置文件中 我尝试用
  • WIX 自动生成 GUID *?

    假设我生成产品 ID 为 的 WIX XML 文件 另外 对于每个组件 GUID 我都使用
  • 如何制作一个简单包装 EXE 文件的 MSI

    经过大量实验后 我得出的结论是 Windows Installer 是一种糟糕的技术 但客户需要 MSI 文件 那么 如何创建一个 MSI 文件 将 EXE 文件提取到临时目录 并使用与传递给 EXE 文件相同或相似的选项运行它 MSI 的
  • 如何使用 WiX 卸载时终止进程

    我正在使用 Wix 创建 msi 安装文件 当我卸载应用程序时 它仍然在工作 并且我可以在任务管理器中看到它 我已经尝试过自定义操作的延迟执行 如 Wix 文档中所述 https wixtoolset org documentation m

随机推荐

  • 如何将每个 DStream 保存/插入到永久表中

    我一直面临着 Spark Streaming 的问题 关于将输出 Dstream 插入到永恒的SQL 表 我想将每个输出 DStream 来自 Spark 处理的单个批次 插入到一个唯一的表中 我一直在使用 Python 和 Spark 版
  • 在Java中禁用键盘/鼠标

    我正在开发一个程序 它允许用户锁定计算机 这样其他人就不能使用它 无论如何 我可以禁用鼠标和键盘上的特定键吗 谢谢 不 但是您可以创建让程序锁定屏幕 然后使用 MouseMovementListener 以便每次鼠标移动时 您都以编程方式将
  • 使用 Javascript 选定单词的索引

    如何使用 Javascript 获取 HTML 中选定文本的索引 例如 在一个 HTML 文件中 有如下段落 我住在印度 印度是一个非常美丽的国家 现在如果用户选择India在第一句话中应该有一个alert 5如果用户选择India第二行然
  • C# lambda 编译成什么?堆栈框架,匿名类型的实例,还是?

    C lambda 编译成什么 堆栈框架 匿名类型的实例 还是 我读过这个question 这主要回答了 为什么 在使用隐式类型功能时不能使用 lambda 但是 这个问题旨在回答编译器生成什么构造来实际执行 lambda 代码 它是匿名类型
  • 使用 Telnet 从 Gmail 发送电子邮件

    我正在 Windows 上工作 并且启用了 telnet 客户端 在cmd提示符下 telnet smtp gmail com 587 220 mx google com ESMTP dk3sm50678627pbc 32 gsmtp He
  • gulp:如何在不刷新的情况下更新浏览器(仅适用于 css 更改)

    我已经设置了 gulp 以便在进行更改时浏览器会重新加载 但是 对于 css 更改 我希望浏览器无需刷新即可更新 但我不知道如何执行此操作 对于我当前的设置 我使用了this教程 var debug require gulp debug c
  • 使用正则表达式拆分列中的值

    我的 data frame 有两列 如下所示 dat ID Details id 1 box1 homodomain gn box1 os homo sapiens p 4 se 1 id 2 sox2 plurinet gn plu os
  • 如何在 unicode 中管理混合 LTR 和 RTL 语言?

    有时我们必须在显示屏上显示混合了 RTL 和 LTR 语言的消息 该消息采用 unicode 格式 那么 unicode 如何处理混合呢 对平台有依赖吗 该过程由此处描述的 Unicode 双向算法描述 http www unicode o
  • 如何使用 md5 代替 bcrypt?

    我需要使用md5 代替bcrypt 用于存储密码 但是当我这样做时 protected function create array data return Account create username gt data username e
  • 这段代码中DATA SEGMENT下的代码什么时候执行?

    我是汇编编程的初学者 我在谷歌上浏览了很多 信息很多 但是我还是看不懂下面的代码 如果有人能解释 我将不胜感激 MOV AX 数据 我也不明白数据段中存在的代码何时会在此程序中执行 ASSUME CS CODE DS DATA CODE S
  • 将参数传递到 JButton ActionListener

    我正在寻找一种将变量或字符串或任何内容传递到 JButton 的匿名 actionlistener 或显式 actionlistener 中的方法 这是我所拥有的 public class Tool public static void a
  • Require.js 与 Phonegap 和 iOS 推送通知

    我正在使用 Phonegap Backbone js 和 Require js 构建一个应用程序 该应用程序实现了 Phonegap 推送通知 目前 index html 中脚本的加载如下所示
  • jQuery keyup() 非法字符

    我有一个字段 希望在用户键入时显示一些非法字符 在下面的示例中我该如何做到这一点 input bind change keyup function var val this attr value if val contains this c
  • 我们如何检测影子根是使用 v0 还是 v1 API 创建的?

    假设一个 JS 模块导出shadowRoot这是用以下任一方法创建的el createShadowRoot or el attachShadow 我们不知道是哪个 我们如何检测根是 v0 影子根还是 v1 影子根 即我们如何检测使用哪种方法
  • 如何将n列连接成一列?

    我的目标是如果我有这个 colmuns c1 c2 c3 c4 c5 n row1 a a a a a row2 b b b b b rowN 我想做一个会返回的查询 myCol aaaaa bbbbb nnnnn 我知道我能做到 sele
  • 函数模板专业化的别名

    int f1 int a int b return a b int f2 int a int b return a b template
  • 在 Ruby 中对数组进行排序,忽略冠词(“the”、“a”、“an”)

    在我的应用程序中 我需要显示歌曲列表 现在我正在这样做 Song all sort x y x artist name lt gt y artist name 不幸的是 这意味着 The Notorious B I G 将按 T 排序 而我
  • 删除mysql字段中的重复单词

    我想知道是否可以使用 mysql 查询从一个字段中删除重复的文本 或者使用 PHP 是否可以更好地解决这样的问题 我有一个数据库 用户可以在其中输入可以搜索的标签 我注意到某些标签具有我想要添加到字段中的同义词 但在某些情况下同义词已经存在
  • 管理.py 运行服务器

    我在跑步python manage py runserver从机器A当我尝试检查机器时B 我输入的网址是http A 8000 我收到类似的错误The system returned 111 Connection refused 您可以通过
  • Wix 安装程序:已安装的服务在启动时无法读取 HKLM 注册表项

    我正在使用 wix 工具 3 11 创建一个安装服务的 msi 安装程序运行自定义操作并将变量返回到 wix 以写入注册表 HKLM 该服务启动并尝试读取注册表 但无法完成并且失败 如果我手动编写注册表 安装程序将完美运行 msi 日志中的