zoukankan      html  css  js  c++  java
  • c# windows服务如何获取自己的安装路径

    由于windows服务安装时,系统会自动将windows服务的程序文件复制到系统目录下,通常是System32目录下,windows服务的运行目录就是系统目录,有时候,windows服务在运行时需要知道自己的安装目录,比如,windows服务运行时所需要的一些资源文件,通常可能是一些声音或图像文件,这些资源文件是位于安装目录下的,只有windows服务知道了安装目录,才能对这些资源文件进行访问,那么windows服务如何知道自己的安装目录的信息呢,一种比较简单的做法是通过访问注册表。

    如下图,是一个名字叫MazeServer的服务,通过服务管理器察看属性,注意,其中的“可执行文件的路径”一栏所记录的就是服务的镜像路径

    windows服务在安装后,会在系统注册表中进行记录,以上面提到的MazeServer为例,通过运行注册表编辑器(regedit)可以找到如下键值:

    /HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services/MazeServer

    打开该键可以看到其下面的项,如图:

     
    其中那个ImagePath的项的值就是我们需要得到的信息。
     
    由此,我们可以知道,只要我们能够从系统注册表中找到对应的键读取ImagePath的项就可以得到安装路径信息。提供如下类供参考。
     
     

    在Windows服务中需要获得当前服务所在的路径时,不能简单的使用Environment.CurrentDirectory来获得当前路径,因为windows服务所启动的目录都是在c:/windows/system32。如果在你的服务中需要检测某个配置文件时,你无法获得这个配置文件的路径。这时有2种解决方案:

    一、就是将你的配置文件安装在system32目录下

    二、在你的服务中通过注册表来获得这个服务的安装路径

    /*
      Windows服务在系统安装后会在注册表的 "HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServices[ServiceName]"下以服务的ServiceName建1个目录,目录中会有"ImagePath"节,这里保存的就是该服务的安装路径。
    */
     

            /// <summary>
            /// 获取服务安装路径
            /// </summary>
            /// <param name="ServiceName"></param>
            /// <returns></returns>
            public static string GetWindowsServiceInstallPath(string ServiceName)
            {
                string key = @"SYSTEMCurrentControlSetServices" + ServiceName;
                string path = Registry.LocalMachine.OpenSubKey(key).GetValue("ImagePath").ToString();
                //替换掉双引号   
                path = path.Replace(""", string.Empty);

                FileInfo fi = new FileInfo(path);
                return fi.Directory.ToString();

    }
  • 相关阅读:
    www.insidesql.org
    kevinekline----------------- SQLSERVER MVP
    Sys.dm_os_wait_stats Sys.dm_performance_counters
    如何使用 DBCC MEMORYSTATUS 命令来监视 SQL Server 2005 中的内存使用情况
    VITAM POST MORTEM – ANALYZING DEADLOCKED SCHEDULERS MINI DUMP FROM SQL SERVER
    Cargo, Rust’s Package Manager
    建筑识图入门(初学者 入门)
    Tracing SQL Queries in Real Time for MySQL Databases using WinDbg and Basic Assembler Knowledge
    Microsoft SQL Server R Services
    The Rambling DBA: Jonathan Kehayias
  • 原文地址:https://www.cnblogs.com/qi123/p/9482881.html
Copyright © 2011-2022 走看看