J'essaie de créer un service Windows, mais lorsque j'essaie de l'installer, il revient en arrière et me donne cette erreur:
System.Security.SecurityException: La source n'a pas été trouvée, mais certains ou tous les journaux des événements n'ont pas pu être recherchés. Journaux inaccessibles: Sécurité.
Je ne sais pas ce que cela signifie - mon application a le minimum, car je teste d'abord les choses.
Mon code installateur:
namespace WindowsService1
{
[RunInstaller(true)]
public partial class ProjectInstaller : System.Configuration.Install.Installer
{
public ProjectInstaller()
{
//set the privileges
processInstaller.Account = ServiceAccount.LocalSystem;
processInstaller.Username = null;
processInstaller.Password = null;
serviceInstaller.DisplayName = "My Service";
serviceInstaller.StartType = ServiceStartMode.Manual;
//must be the same as what was set in Program's constructor
serviceInstaller.ServiceName = "My Service";
this.Installers.Add(processInstaller);
this.Installers.Add(serviceInstaller);
}
private void serviceProcessInstaller1_AfterInstall(object sender, InstallEventArgs e)
{
}
private void serviceInstaller1_AfterInstall(object sender, InstallEventArgs e)
{
}
}
}
Mon code de service:
public partial class Service1 : ServiceBase
{
public Service1()
{
this.ServiceName = "My Service";
}
protected override void OnStart(string[] args)
{
base.OnStart(args);
}
protected override void OnStop()
{
base.OnStop();
}
}
Si vous êtes invité à entrer un nom d'utilisateur et un mot de passe, quelque chose, quelque part, est défini sur Account = ServiceAccount.User
- c'est le seul moyen qui pourrait (devrait) arriver. Peut-être que votre code dans le commentaire ci-dessus n'est pas en cours d'exécution ou qu'il est modifié par un code en exécution ultérieure.
En ce qui concerne votre deuxième paragraphe, en général, je penserais qu'un service conviendrait à cela si vous ne voulez pas qu'il soit visible sur la console ou exécuté en tant que tâche. Je ne suis pas sûr de comprendre la partie sur son exécution en tant qu'ASP.NET et de ne pas l'avoir autorisée à voir la base de données ...
Enfin, dans votre dernier paragraphe, je ne peux pas parler de NullExeception sans en savoir plus sur ce qui se passe dans le code de votre installateur.
La même exception s'est produite lors de l'installation d'un service à partir de la ligne de commande lors de l'utilisation de installutil sous Windows 7. La solution consistait à ouvrir la ligne de commande en tant qu'administrateur, puis à exécuter installutil.
Vous pouvez également trouver plus facile d’utiliser un framework tel que TopShelf pour héberger vos services, car il gère tout le configuration d’installation à partir du nom et de la description du service jusqu’à la manière dont votre récupération a été effectuée. processus fonctionnera. Cela permet également de démarrer facilement votre service depuis l’intérieur du IDE lorsque vous le déboguez.
Exécutez votre invite de commande en tant qu'administrateur. Ça va résoudre ton problème
C’est un problème très courant qui manque aux programmeurs.
Je résous ce problème en ouvrant la console développeur VS2013 avec des autorisations administratives.
Vous essayez probablement d'installer un service en utilisant
Plus précisément, le problème dans ce cas est la création de certaines clés de registre EventLog lors de l’installation du service.
ne façon de résoudre ce problème consiste à vérifier que vous exécutez l'invite de commande en mode Administrateur. (Cliquez avec le bouton droit de la souris sur> Exécuter en tant qu'administrateur)
J'ai également rencontré des cas où cette méthode ne résout toujours pas le problème SecurityException car certaines clés de registre ne disposent pas des autorisations "Contrôle total" pour les comptes d'administrateur.
"Contrôle total" doit être défini sur les clés suivantes pour les administrateurs afin que le service puisse écrire dans le journal des événements:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\EventLog HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\EventLog\Application
Cela peut être fait par: