flamencist / flamencist/Core.System.Configuration.Install

Service is being created with executable path pointing to DLL instead of EXE

Abierto
#8 3 comentarios 0 reacciones 0 asignados Ver en GitHub
Lenguaje dominante
C#
Estrellas
26
Forks
12
Métricas de merge de PR
Sin PR fusionados en 30 d

Descripción

We have a service installation code which works just fine with .NET Frameworks 4.8 Console application based on `ServiceBase`:

```C#
ManagedInstallerClass.InstallHelper(new string[] { Assembly.GetExecutingAssembly().Location });
```

```C#
using System.ComponentModel;
using System.Configuration.Install;
using System.ServiceProcess;

namespace TestServiceInstall
{
[RunInstaller(true)]
public class TestServiceInstaller : Installer
{
public TestServiceInstaller()
{
ServiceProcessInstaller processInstaller = new ServiceProcessInstaller();
ServiceInstaller serviceInstaller = new ServiceInstaller();

// set the privileges
processInstaller.Account = ServiceAccount.LocalSystem;

serviceInstaller.DisplayName = GlobalVar.SERVICE_NAME;
serviceInstaller.StartType = ServiceStartMode.Automatic;
serviceInstaller.DelayedAutoStart = true;
serviceInstaller.ServicesDependedOn = new string[] { "Tcpip" };

// must be the same as what was set in Program's constructor
serviceInstaller.ServiceName = GlobalVar.SERVICE_NAME;

// installer code here
this.AfterInstall += new InstallEventHandler(ServiceInstaller_AfterInstall);

this.Installers.Add(processInstaller);
this.Installers.Add(serviceInstaller);
}

void ServiceInstaller_AfterInstall(object sender, InstallEventArgs e)
{
ServiceController sc = new ServiceController(GlobalVar.SERVICE_NAME);
sc.Start();
}
}
}
```

We tried to migrate to .NET 6.0 and use this library to install the service in a same way we used to, but what happens is service binary path changed from EXE file to DLL file and we can't figure out how to point it to the EXE file.

We've tried changing `Assembly.GetExecutingAssembly().Location` to `Environment.ProcessPath` but it gives us the following error:

```
System.BadImageFormatException: Bad IL format. The format of the file '%EXE path here%' is invalid..
```

So the question is how can we use this library to install a windows service pointing to EXE file instead of DLL?

Guía de contribución

No hay ninguna guía de contribución indexada para este repositorio

Línea de trabajo

Start with ManagedInstallerClass.InstallHelper and the ServiceInstaller setup shown in the issue, then reproduce the .NET 6 installation using Assembly.GetExecutingAssembly().Location and Environment.ProcessPath. Trace how the library derives the service binary path and verify the fix by installing successfully with the service configured to launch the intended executable.

Escrito por el modelo de indexación a partir del texto del issue.

Evaluación

Stack tecnológico
csharp
Área
operating-systems, tooling
Tipo de issue
Error
Dificultad
4/5
Tiempo estimado
3-5 días
Estado de actividad
Estancado
Claridad
Bastante claro
Aptitud para principiantes
25/100

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.