使用Inno Setup安装具有不同配置的同一Windows服务的多个实例

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用Inno Setup安装具有不同配置的同一Windows服务的多个实例相关的知识,希望对你有一定的参考价值。

我是编程和编码的新手,我被要求多次安装服务,并让他们拥有不同的配置文件。这是事情:

  • 我需要使用不同的名称安装两次相同的服务
  • 每个服务都必须读取不同的配置文件

在配置文件中,我有两个服务需要不同的连接设置。该服务只是从另一个控制器检索信息,但是他们需要从两个不同的控制器接收信息,这就是为什么他们要求使用不同的配置文件具有相同服务的两个不同实例。

我坚持这个。我知道这两种服务都必须有不同的名称。但是如何使用Inno安装程序安装它们并让它们读取两个不同的配置文件?

该服务是使用#C,.NET Framework 4.5.2完成的

我有1个实例的简单安装程序:

[Files]
Source: "C:\...\Service.exe"; DestDir: "{app}"; Flags: ignoreversion
Source: "C:\...\log4net.dll"; DestDir: "{app}"; Flags: ignoreversion
Source: "C:...\Service.exe.config"; DestDir: "{app}"; Flags: ignoreversion

[Run]
Filename: {sys}\sc.exe; \
    Parameters: "create Service start= auto binPath= ""{app}\Service.exe"""; \
    Flags: runhidden

[UninstallRun]
Filename: {sys}\sc.exe; Parameters: "stop Service"; Flags: runhidden
Filename: {sys}\sc.exe; Parameters: "delete Service"; Flags: runhidden

这是一项非常简单的服务。我知道如何添加带有复选框的Components,以便用户选择他们想要的实例数。但我不知道如何添加第二个实例以及如何使第二个实例读取第二个配置文件。我的服务代码中是否需要更改某些内容?这是可能吗?

我很抱歉我的英语很差,如果我不能更好地解释自己。我对编码和服务几乎一无所知。谢谢你的帮助!

答案

服务名称是create命令之后的第一个参数。

因此,在[Run]部分创建两个条目,每个服务一个:

[Run]
Filename: {sys}\sc.exe; \
    Parameters: "create Service1 start= auto binPath= ""{app}\Service.exe""" ; \
    Flags: runhidden
Filename: {sys}\sc.exe; \
    Parameters: "create Service2 start= auto binPath= ""{app}\Service.exe""" ; \
    Flags: runhidden

同样对于[UninstallRun]


关于加载配置文件。您没有告诉我们任何有关您的服务代码如何确定从哪里加载配置文件的信息。

假设路径以某种方式硬编码(或以某种方式以编程方式解析),您可以更改代码以将服务名称合并到路径中。

要确定当前正在运行C#代码的服务实例的名称,请参阅How can a Windows Service determine its ServiceName?

以上是关于使用Inno Setup安装具有不同配置的同一Windows服务的多个实例的主要内容,如果未能解决你的问题,请参考以下文章

Flutter桌面开发 — Windows App打包以及使用Inno Setup生成.exe文件安装包

如何使用 Inno Setup 安装 .NET 框架作为先决条件?

仅在需要时使 Inno Setup 安装程序请求权限提升

在安装过程中使用 Inno Setup 删除另一个未随 Inno Setup 安装的应用程序

inno setup安装包制作问题?

更改 Inno Setup 卸载程序的默认名称以避免命名冲突