J'ai essayé d'installer un service Windows via C# pendant quelques heures.Impossible d'installer un service Windows par programme
Lorsque j'exécute la fonction InstallService()
, IsInstalled()
renvoie la valeur false même après l'exécution de InstallService()
, et je ne parviens donc pas à démarrer le service Windows.
Par exemple:
InstallService();
IsInstalled(); // false
ServiceBase[] ServicesToRun = new ServiceBase[] { new Service1() };
ServiceBase.Run(ServicesToRun); //Throws an exception because uninstalled!
Alors, voici le code d'installation, je montre que le code correspondant:
private static void InstallService()
{
if (IsInstalled()) return;
try
{
using (AssemblyInstaller installer = GetInstaller())
{
IDictionary state = new Hashtable();
try
{
installer.Install(state);
installer.Commit(state);
}
catch
{
try
{
installer.Rollback(state);
}
catch { }
throw;
}
}
}
catch
{
throw;
}
}
private static AssemblyInstaller GetInstaller()
{
AssemblyInstaller installer = new AssemblyInstaller(
typeof(Service1).Assembly, null);
installer.UseNewContext = true;
return installer;
}
private static bool IsInstalled()
{
using (ServiceController controller =
new ServiceController("Service1"))
{
try
{
ServiceControllerStatus status = controller.Status;
}
catch
{
return false;
}
return true;
}
}
Et le programme est en cours d'exécution droit élevé? Comment cela échoue-t-il exactement? –