Tengo un servicio de Windows y necesito crear un directorio para almacenar cierta información. La ruta del directorio debe ser relativa al archivo exe del servicio de Windows. ¿Cómo se puede obtener esta ruta de archivo exe?Cómo encontrar el servicio de Windows exe ruta
Respuesta
Puede utilizar AppDomain.CurrentDomain.BaseDirectory
Esta solución no funcionará correctamente si ejecuta el servicio con una cuenta diferente ... – Lectere
Cuando hago esto, para un servicio que se ejecuta como sistema local, se evalúa como c: \ windows \ system32 – schizoid04
En lugar de utilizar un directorio en relación con el ejecutable, y por lo tanto necesidad de tener privilegios de administrador, por qué no utilizar el directorio de datos de aplicación común, que es accesible a través de
Environment.GetFolderPath(SpecialFolder.CommonApplicationData)
esta manera su aplicación no necesita acceso de escritura a su propio directorio de instalación, lo que lo hace más seguro.
También, en Windows Vista y Windows 7, no puede escribir en la carpeta de archivos del programa, ¡incluso como administrador! –
El directorio predeterminado para un servicio de Windows es la carpeta System32. En su servicio, sin embargo, puede cambiar el directorio actual al directorio que ha especificado en la instalación del servicio haciendo lo siguiente en su 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(@"\")));
Editar: un método aún más simple (pero no he probado aún):
System.IO.Directory.SetCurrentDirectory(System.AppDomain.CurrentDomain.BaseDirectory);
string exe = Process.GetCurrentProcess().MainModule.FileName;
string path = Path.GetDirectoryName(exe);
svchost.exe es el ejecutable que se ejecuta el servicio que se encuentra en system32. Por lo tanto, necesitamos llegar al módulo que está siendo ejecutado por el proceso.
probar este
System.Reflection.Assembly.GetEntryAssembly().Location
Consejo: Si usted quiere encontrar ruta de inicio del servicio de Windows instalado, mira aquí de registro.
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\ + ServiceName
Hay claves acerca de Windows
Para obtener la ruta de servicio que se puede utilizar el objeto de gestión. 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 usted desea conseguir el acceso de la carpeta Archivos de programa o cualquier otro uso de la programación, se debe utilizar el código de abajo que es proporcionar derechos a la carpeta específica.
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. Obteniendo la ruta completa para el servicio de Windows
- 2. Alternar entre EXE independiente y el servicio de Windows
- 3. Eliminar un servicio de Windows sin el EXE
- 4. encontrar el ejecutable real y la ruta asociada a un servicio de Windows usando C#
- 5. Cómo ejecutar un exe del servicio de Windows y detener el servicio cuando se cierra el proceso de ejecución?
- 6. Cómo hacer un comienzo exe en el inicio de Windows
- 7. Varios servicios de Windows en un exe
- 8. Cómo encontrar el objetivo * .exe archivo de * .appref-ms
- 9. Mismo nombre mutex para un servicio de Windows y exe en Windows 7
- 10. cómo obtener la ruta phyiscal del servicio de Windows usando .net?
- 11. Cómo implementar readlink para encontrar la ruta
- 12. Modificar la "Ruta al ejecutable" de un servicio de Windows
- 13. ¿Cómo se diferencia un servicio de Windows de un exe estándar?
- 14. Instalar el servicio de Windows sin InstallUtil.exe
- 15. Cómo extraer la ruta física de un servicio de Windows utilizando el comando Get-Service
- 16. ¿Cómo puedo ejecutar un programa EXE desde un servicio de Windows usando C#?
- 17. Cómo imprimir documentos PDF desde el Servicio de Windows
- 18. Cómo llamar al método desde el servicio de Windows
- 19. Creando el servicio de Windows sin Visual Studio
- 20. de Windows Application perfiladores - C++ Exe
- 21. obtener la ruta para mi .exe
- 22. ¿Cómo puedo encontrar el directorio de instalación de un servicio de Windows, usando C#?
- 23. MSDeploy para instalar el servicio de Windows?
- 24. El servicio de Windows no funciona
- 25. Instalar el servicio de Windows con nombre personalizado
- 26. Firmando un archivo EXE de Windows
- 27. Alojamiento del servicio WCF en el servicio de Windows
- 28. Instalar el servicio .net windows con la carpeta lib
- 29. El mejor lenguaje de script para Windows GUI EXE
- 30. ¿Cómo iniciar Windows 'RegEdit con cierta ruta?
No soy desarrollador de Windows, pero ¿estás seguro de que quieres esto? ¿No pertenece dicha información al directorio personal del usuario, o al de 'LocalService'? –
@Pekka No soy un Desarrollador de Unix, pero los servicios del sistema (daemons) que almacenan archivos en los directorios personales del usuario suenan totalmente dementes. – BrainSlugs83