如何findwindows service exe的path

我有一个Windows服务,我需要创build目录来存储一些信息。 目录path必须是相对于Windows服务exe文件。 如何得到这个exe文件的path?

您可以使用AppDomain.CurrentDomain.BaseDirectory

提示:如果你想查找已安装的windows服务的启动path,请从registry中查看。

 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\ + ServiceName 

有关于Windows服务的键

为了不使用相对于可执行文件的目录,因此需要pipe理员权限,为什么不使用可通过的通用应用程序数据目录

 Environment.GetFolderPath(SpecialFolder.CommonApplicationData) 

这样,您的应用程序就不需要对自己的安装目录进行写入访问,这使您更安全。

要获取服务path,可以使用Management对象。 ref: https : //msdn.microsoft.com/en-us/library/system.management.managementobject(v= vs.110).aspx http://dotnetstep.blogspot.com/2009/06/get-windowservice-可执行文件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()); } 
 string exe = Process.GetCurrentProcess().MainModule.FileName; string path = Path.GetDirectoryName(exe); 

svchost.exe是运行在system32中的服务的可执行文件。 因此我们需要到达正在运行的模块。

尝试这个

 System.Reflection.Assembly.GetEntryAssembly().Location 

Windows服务的默认目录是System32文件夹。 但是,在您的服务中,您可以通过在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(@"\"))); 

编辑:一个更简单的方法(但我还没有testing):

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