WIX 服务安装程序会覆盖服务安装程序设置

2024-03-23

我正在开发一项稍后由 WIX 安装程序部署的服务。 这是服务安装程序类

this.ServiceInstaller.DisplayName = "My Service";
            this.ServiceInstaller.ServiceName = "MyService";
            this.ServiceInstaller.ServicesDependedOn = new string[] {
        "ServiceA",
        "ServiceB",
        "ServiceC"};

这是 WIX 安装程序代码

    <Component Id="MyService.exe" Guid="{1234}">
        <File Id="MyService.exe" KeyPath="yes" Source="$system\$(sys.BUILDARCH)\MyService.exe">
          <netfx:NativeImage Id="MyService.exe" Platform="all" Priority="1" />
        </File>
        <ServiceInstall Id="MyService.exe" DisplayName="My OTHER Service" Name="MyService" ErrorControl="normal" Start="auto" Type="ownProcess">
          <ServiceDependency Id="ServiceD" />
          <ServiceDependency Id="ServiceE" />
          <ServiceDependency Id="ServiceF" />
          <util:ServiceConfig FirstFailureActionType="restart" SecondFailureActionType="restart" ThirdFailureActionType="restart" RestartServiceDelayInSeconds="10" />
        </ServiceInstall>
        <ServiceControl Id="MyService.exe" Name="MyService" Stop="install" Remove="uninstall" />
    </Component>

据我所知,WIX 中的配置完全覆盖项目安装程序中的设置。 (具体名称和依赖项) 这是默认行为吗? 如果 WIX 将完全忽略 serviceInstaller 类,那么它还有什么意义呢?


交联: 几个类似的答案:1) Chris Painter 谈服务凭证保存和/或处理 https://stackoverflow.com/a/61882958, 2) 服务调试 https://stackoverflow.com/a/61149858/129130.


服务安装程序类:此功能通常在以下情况下使用development for testing purposes。您使用InstallUtil.exe用于安装和/或 Visual Studio 的 .NET 工具。


更喜欢微星:安装服务的方法有很多,但你应该使用MSI表ServiceInstall and ServiceControl如果可以的话。以下是有关各种或多或少疯狂的选项的更多详细信息。


服务注册选项: 一份古老的经典文件Phil Wilson (MSI MVP和作者"The Definitive Guide to Windows Installer" https://rads.stackoverflow.com/amzn/click/com/1590592972)列出了多种安装服务的方法:

  • 1) MSI - ServiceInstall, ServiceControl tables - and a few others.
    • WiX service installation sample 1 https://github.com/rstropek/Samples/tree/master/WiXSamples/WindowsService
    • WiX service installation sample 2 https://github.com/Robs79/How-to-create-a-Windows-Service-MSI-Installer-Using-WiX
  • 2) Win32 - CreateService APIs.
  • 3) Registry- 手动更新,通常是不受欢迎的“幕后”选项。
  • 4) WMI 类 - Win32_Service。主要好处:可编写脚本 https://www.vbsedit.com/scripts/os/services/. Wraps CreateService(Win32)。
  • 5) 安装实用程序- .NET 工具和安装程序类。
  • 6) MSI 和安装程序类自定义操作- 打电话InstallUtil.exe通过 shim dllInstallUtilLib.Dll在 Visual Studio 安装项目中 - 这不是我最喜欢的选项。很多复杂性基本上没有任何收获。只需使用 MSI 中的服务表即可。自动魔法。

安装实用程序:当 .NET 出现时,在 .NET 框架中引入了一个名为 InstallUtil.exe 的工具以及一组安装程序类。 ServiceInstaller 框架类包含用于安装服务的代码,开发人员可以重写类方法以提供额外的安装时代码。这为开发人员轻松安装服务以进行测试提供了一种有用的方法。


许多年后,人们可以在菲尔的清单中添加以下内容:

  • SC.exe https://support.microsoft.com/en-us/help/251192/how-to-create-a-windows-service-by-using-sc-exe - https://ss64.com/nt/sc.html https://ss64.com/nt/sc.html
  • 注册表文件 https://learn.microsoft.com/en-us/dotnet/framework/tools/regsvcs-exe-net-services-installation-tool
  • 电源外壳 - 新服务 https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.management/new-service?view=powershell-7, 设定服务 https://ss64.com/ps/set-service.html, etc...

更奇特的是:Srvany(将应用程序作为服务运行,非常过时 - 不要使用)。


基本服务工具:有许多用于使用服务的基本工具,例如:SC.exe, Services.msc, NET, etc... 流程浏览器 https://learn.microsoft.com/en-us/sysinternals/downloads/process-explorer有利于更高级的调试 - 例如,您的服务锁定哪些文件导致升级问题或其他问题。这里有一个其他工具的列表:https://installdude.com/jumpgate.php https://installdude.com/jumpgate.php并单击"Debugging"标签(朝顶部,在搜索框下方),然后单击"Essential Service Tools".


Windows 服务常见问题解答 (FAQ):https://www.coretechnologies.com/WindowsServices/FAQ.html https://www.coretechnologies.com/WindowsServices/FAQ.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

WIX 服务安装程序会覆盖服务安装程序设置 的相关文章

  • Tensorflow 中的自定义资源

    由于某些原因 我需要为 Tensorflow 实现自定义资源 我试图从查找表实现中获得灵感 如果我理解得好的话 我需要实现3个TF操作 创建我的资源 资源的初始化 例如 在查找表的情况下填充哈希表 执行查找 查找 查询步骤 为了促进实施 我
  • 将处理后的图形绘制到另一个图形中

    我想将一个经过处理的图形绘制到另一个图形中 I have two graphics var gHead Graphics FromImage h var gBackground Graphics FromImage b Transform
  • 添加对共享类的多个 WCF 服务的服务引用

    我正在尝试将我的 WCF Web 服务拆分为几个服务 而不是一个巨大的服务 但是 Visual Studio Silverlight 客户端 复制了两个服务共享的公共类 这是一个简单的例子来说明我的问题 在此示例中 有两个服务 两者都返回类
  • 如何进行带有偏差的浮点舍入(始终向上或向下舍入)?

    我想以偏置舍入浮动 要么总是向下 要么总是向上 代码中有一个特定的点 我需要这个 程序的其余部分应该像往常一样四舍五入到最接近的值 例如 我想四舍五入到最接近的 1 10 倍数 最接近 7 10 的浮点数约为 0 69999998807 但
  • 捕获 foreach 条件中抛出的异常

    我有一个foreach在 foreach 本身的条件下循环期间中断的循环 有没有办法try catch抛出异常然后继续循环的项 这将运行几次 直到异常发生然后结束 try foreach b in bees exception is in
  • Blazor 与 Razor

    随着 Blazor 的发明 我想知道这两种语言之间是否存在显着的效率 无论是在代码创建方面还是在代码的实际编译 执行方面 https github com SteveSanderson Blazor https github com Ste
  • 通信对象 System.ServiceModel.Channels.ServiceChannel 不能用于通信

    通信对象System ServiceModel Channels ServiceChannel 无法用于通信 因为它处于故障状态 这个错误到底是什么意思 我该如何解决它 您收到此错误是因为您让服务器端发生 NET 异常 并且您没有捕获并处理
  • 处理 fanart.tv Web 服务响应 JSON 和 C#

    我正在尝试使用 fanart tv Webservice API 但有几个问题 我正在使用 Json Net Newtonsoft Json 并通过其他 Web 服务将 JSON 响应直接反序列化为 C 对象 这里的问题是元素名称正在更改
  • Linux TUN/TAP:无法从 TAP 设备读回数据

    问题是关于如何正确配置想要使用 Tun Tap 模块的 Linux 主机 My Goal 利用现有的路由软件 以下为APP1和APP2 但拦截并修改其发送和接收的所有消息 由Mediator完成 我的场景 Ubuntu 10 04 Mach
  • 获取从属性构造函数内部应用到哪个属性的成员?

    我有一个自定义属性 在自定义属性的构造函数内 我想将属性的属性值设置为属性所应用到的属性的类型 是否有某种方式可以访问该属性所应用到的成员从我的属性类内部 可以从 NET 4 5 using CallerMemberName Somethi
  • 为什么密码错误会导致“填充无效且无法删除”?

    我需要一些简单的字符串加密 所以我编写了以下代码 有很多 灵感 来自here http www codeproject com KB security DotNetCrypto aspx create and initialize a cr
  • 将构建参数传递给 .wxs 文件以动态构建 wix 安装程序

    我是一名学生开发人员 我已经为我现在工作的公司构建了几个安装程序 所以我对WIX还是比较熟悉的 我们最近决定拥有一个构建服务器来自动构建我们的解决方案 它构建调试和发布以及混淆 和非混淆 项目 你真的不需要理解这些 您需要了解的是 我有相同
  • gdb 在 docker 上立即退出“进程已完成,退出代码 1”或 lldb“数据包返回错误 8”。另外:如何在 docker 中允许进行 C++ 调试

    这花了我一整天的时间才找到 所以我将其发布以供将来参考 我正在 docker 镜像上开发 C 我正在使用克利翁 我的代码是在调试模式下编译的 并且在运行模式下运行良好 但是当尝试调试时 进程会立即退出 并显示非常丰富的信息 Process
  • 组合框项目为空但数据源已满

    将列表绑定到组合框后 其 dataSource Count 为 5 但组合框项目计数为 0 怎么会这样 我习惯了 Web 编程 而且这是在 Windows 窗体中进行的 所以不行combo DataBind 方法存在 这里的问题是 我试图以
  • 用于从字符串安全转换的辅助函数

    回到 VB6 我编写了一些函数 让我在编码时无需关心字符串的 null 和 数字的 null 和 0 等之间的区别 编码时 没有什么比添加特殊情况更能降低我的工作效率了用于处理可能导致一些不相关错误的数据的代码 9999 10000 如果我
  • 如何排列表格中的项目 - MVC3 视图 (Index.cshtml)

    我想使用 ASP NET MVC3 显示特定类型食品样本中存在的不同类型维生素的含量 如何在我的视图 Index cshtml 中显示它 an example 这些是我的代码 table tr th th foreach var m in
  • 从匿名类型获取值

    我有一个方法如下 public void MyMethod object obj implement 我这样称呼它 MyMethod new myparam waoww 那么我该如何实施MyMethod 获取 myparam 值 Edit
  • 内核开发和 C++ [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 从我know https stackoverflow com questions 580292 what languages are windo
  • 过度使用委托对性能来说是一个坏主意吗? [复制]

    这个问题在这里已经有答案了 考虑以下代码 if IsDebuggingEnabled instance Log GetDetailedDebugInfo GetDetailedDebugInfo 可能是一个昂贵的方法 因此我们只想在调试模式
  • 如何确定母版页中正在显示哪个子页?

    我正在母版页上编写代码 我需要知道正在显示哪个子 内容 页面 我怎样才能以编程方式做到这一点 我用这个 string pageName this ContentPlaceHolder1 Page GetType FullName 它以 AS

随机推荐