J'ai un service Windows et j'ai besoin de créer un répertoire pour stocker quelques informations. Le chemin du répertoire doit être relatif au fichier exe du service Windows. Comment obtenir ce chemin de fichier exe?Comment trouver le service windows exe
Répondre
Vous pouvez utiliser AppDomain.CurrentDomain.BaseDirectory
Cette solution ne fonctionnera pas correctement si vous exécutez le service avec un compte différent ... – Lectere
Lorsque je fais cela, pour un service s'exécutant en tant que système local, il évalue à c: \ windows \ system32 – schizoid04
Au lieu d'utiliser un répertoire par rapport à l'exécutable, et donc besoin des privilèges d'administrateur, pourquoi ne pas utiliser le répertoire de données d'application commune, qui est accessible par
Environment.GetFolderPath(SpecialFolder.CommonApplicationData)
De cette façon votre application n'a pas besoin d'un accès en écriture à son propre répertoire d'installation, ce qui vous rend plus sûr.
Aussi, dans Windows Vista et Windows 7, vous ne pouvez pas écrire dans le dossier des fichiers programme, même en tant qu'administrateur! –
Le répertoire par défaut pour un service Windows est le dossier System32. Dans votre service, cependant, vous pouvez changer le répertoire courant dans le répertoire que vous avez spécifié dans l'installation de service en procédant comme suit dans votre OnStart:
// Define working directory (For a service, this is set to System)
// This will allow us to reference the app.config if it is in the same directory as the exe
Process pc = Process.GetCurrentProcess();
Directory.SetCurrentDirectory(pc.MainModule.FileName.Substring(0, pc.MainModule.FileName.LastIndexOf(@"\")));
Edit: une méthode encore plus simple (mais je n'ai pas testé encore):
System.IO.Directory.SetCurrentDirectory(System.AppDomain.CurrentDomain.BaseDirectory);
string exe = Process.GetCurrentProcess().MainModule.FileName;
string path = Path.GetDirectoryName(exe);
svchost.exe est l'exécutable qui fonctionne votre service qui est en system32. Par conséquent, nous devons accéder au module qui est exécuté par le processus.
Essayez cette
System.Reflection.Assembly.GetEntryAssembly().Location
Astuce: Si vous voulez trouver chemin démarrage du service Windows installé, regardez ici de registre.
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\ + ServiceName
Il y a des touches sur service Windows
Pour obtenir le chemin pour le service, vous pouvez utiliser l'objet de gestion. ref: https://msdn.microsoft.com/en-us/library/system.management.managementobject(v=vs.110).aspx http://dotnetstep.blogspot.com/2009/06/get-windowservice-executable-path-in.html
using System.Management;
string ServiceName = "YourServiceName";
using (ManagementObject wmiService = new ManagementObject("Win32_Service.Name='"+ ServiceName +"'"))
{
wmiService.Get();
string currentserviceExePath = wmiService["PathName"].ToString();
Console.WriteLine(wmiService["PathName"].ToString());
}
Si vous souhaitez obtenir l'accès du dossier Program Files ou tout autre utilisation de la programmation, vous devez utiliser le code ci-dessous qui est de fournir des droits à dossier spécifique.
private bool GrantAccess(string fullPath)
{
DirectoryInfo dInfo = new DirectoryInfo(fullPath);
DirectorySecurity dSecurity = dInfo.GetAccessControl();
dSecurity.AddAccessRule(new FileSystemAccessRule(new SecurityIdentifier(WellKnownSidType.WorldSid, null), FileSystemRights.FullControl, InheritanceFlags.ObjectInherit | InheritanceFlags.ContainerInherit, PropagationFlags.NoPropagateInherit, AccessControlType.Allow));
dInfo.SetAccessControl(dSecurity);
return true;
}
- 1. Comment exécuter un exe à partir du service Windows et arrêter le service lorsque le processus exe se ferme?
- 2. exe au service
- 3. Exe au service possible?
- 4. web service .exe plante sur le serveur
- 5. windows exe à linux exe
- 6. Exécuter IKVM exe en tant que service Windows
- 7. Installer EXE en tant que service sur Windows 2008 Server
- 8. Trouver le JRE sur Windows
- 9. Installation du service Windows
- 10. Comment mettre le fichier exe dans Windows Startup
- 11. Windows Service - Quel utilisateur appelle le service
- 12. Installer le service Windows sur Windows Vista
- 13. Signature d'un fichier Windows EXE
- 14. python windows fichier autonome exe
- 15. appelez un exe de l'intérieur C++ (windows)
- 16. Service WCF en tant que service Windows (0) Windows 7
- 17. installer le service Windows dans Windows 7
- 18. Obtention du chemin d'accès complet pour le service Windows
- 19. Comment appeler la méthode depuis le service Windows
- 20. Installer le service Windows sans InstallUtil.exe
- 21. Comment puis-je trouver le chemin physique actuel où réside un service Windows personnalisé?
- 22. Comment trouver le répertoire d'installation d'un service Windows en utilisant C#?
- 23. Comment puis-je trouver le service Windows qui héberge une instance SQL Server particulière?
- 24. Minuteur dans le service Windows
- 25. pourquoi le service Windows plante?
- 26. Problème de référence de service Web dans le service Windows
- 27. Comment appeler le service Windows à partir du service Windows dans C# .NET?
- 28. Appelez le service Web depuis le service .net 3.5 windows
- 29. Quand utiliser le service WCF et le service Windows ancien?
- 30. redémarrage du service python (lorsqu'il est compilé exe)
Je ne suis pas un développeur Windows mais êtes-vous sûr de vouloir cela? Ces informations n'appartiennent-elles pas au répertoire personnel de l'utilisateur ou à celui de 'LocalService'? –
@Pekka Je ne suis pas un développeur Unix, mais les services système (démons) qui stockent des fichiers dans les répertoires personnels de l'utilisateur sont complètement insensés. – BrainSlugs83