Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to find windows service exe path

People also ask

How do I find Windows service path?

If you right click any one of the Windows Services and then choose Properties, you would see the Service snap-in. In the Service snap-in, there is an item called "Path to Executable" that shows you the original location of your Windows Service's executable.

How do I change the path of a Windows service?

To change the executable path of ServiceDesk go to below-mentioned location from registry. run -> regedit -> navigate to the below-mentioned location and highlight the ServiceDesk and from the right-hand side edit the ImagePath as required.


You can use AppDomain.CurrentDomain.BaseDirectory


Tip: If you want to find startup path of installed windows service, look here from registry .

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\ + ServiceName

There are keys about windows service


To get path for service you can use Management object. 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());
                }

Instead of using a directory relative to the executable, and therefore needing admin privileges, why not use the common application data directory, which is accessible through

Environment.GetFolderPath(SpecialFolder.CommonApplicationData)

This way your app doesn't need write access to its own install directory, which makes you more secure.


Try this

System.Reflection.Assembly.GetEntryAssembly().Location

string exe = Process.GetCurrentProcess().MainModule.FileName;
string path = Path.GetDirectoryName(exe); 

svchost.exe is the executable which runs your service which is in system32. Hence we need to get to the module which is being run by the process.


The default directory for a windows service is the System32 folder. In your service, though, you can change the current directory to the directory that you specified in the service installation by doing the following in your 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: an even simpler method (but I haven't tested yet):

System.IO.Directory.SetCurrentDirectory(System.AppDomain.CurrentDomain.BaseDirectory);