【问题标题】:C# Windows Service, The Service Name is InvalidC# Windows 服务,服务名称无效
【发布时间】:2021-11-02 03:22:41
【问题描述】:

好的,我已经编写了一个控制台应用程序并且它可以工作。这是代码。

    static void Main(string[] args)
    {
        IceMain.Instance.Start();

        Console.ReadLine();

        IceMain.Instance.Stop();
        IceMain.Instance.Term();
    }

现在,当我编写 C# Windows 服务并尝试启动该服务时。它没有用。这是 Windows 服务代码...

public partial class Service1 : ServiceBase
{
    public Service1()
    {
        InitializeComponent();
    }

    protected override void OnStart(string[] args)
    {
        IceMain.Instance.Start();
    }

    protected override void OnStop()
    {
        IceMain.Instance.Stop();
        IceMain.Instance.Term();
    }
}

当然,我给了它一个服务名称,sid,并正确设置了东西。 但是当我做 net start sid 时,它给了我:

Microsoft (R) .NET Framework 安装实用程序版本 4.8.3752.0 版权所有 (C) 微软公司。版权所有。 初始化安装时出现异常:

System.BadImageFormatException:无法加载文件或程序集 'file:///C:\Project\sptrader_dotnet\ICEService\IcePrice\bin\Debug\IcePrice.exe' 或其依赖项之一。试图加载格式不正确的程序.. 服务名称无效。

键入 NET HELPMSG 2185 可获得更多帮助。

我所知道的是,底层应用程序还依赖于几个 x64 C++ DLL。 但是我确实将我的服务设置为在 x64 平台上编译,并确保这些 Dll 在示例文件夹中,但该服务仍然无法运行,而在控制台应用程序中,它可以工作。

这是怎么回事,我该如何修复它以在 Windows 服务上运行? 它似乎与我的服务名称没有任何关系,因为我之前编写了许多 Windows 服务并且一切正常,但对于这种情况,它涉及一些 C++ DLL。

【问题讨论】:

  • 什么是IceMain.Instance?你在哪里打电话ServiceBase.Run()

标签: c# dll windows-services


【解决方案1】:

System.BadImageFormatException 异常通常与 32 位与 64 位不匹配有关。

可能的情况:

  • 您的服务 (IcePrice.exe) 是 64 位进程,(即,它被构建为 x64
  • 但是“实际服务注册”是32位的,即使用32位安装的InstallUtil

尝试使用 64 位 InstallUtil 工具安装您的服务

64 位 InstallUtil 通常位于: C:\Windows\Microsoft.NET\Framework64\v4.0.30319(注意路径中的“64”)

https://docs.microsoft.com/en-us/dotnet/framework/tools/installutil-exe-installer-tool

使用 64 位 CLR 时,使用 32 位安装程序工具安装 32 位程序集,使用 64 位安装程序工具安装 64 位和 Microsoft 中间语言 (MSIL) 程序集。两个版本的安装程序工具的行为相同。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-10-12
    • 2014-09-28
    • 2012-08-06
    • 1970-01-01
    • 2017-03-02
    • 2010-10-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多