源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

使用winapi安装Windows服务示例程序

  • 时间:2022-09-29 23:42 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:使用winapi安装Windows服务示例程序
[u]复制代码[/u] 代码如下:
using system; using system.runtime.interopservices; namespace myserviceinstaller {     class serviceinstaller     {         #region private variables         private string _servicepath;         private string _servicename;         private string _servicedisplayname;         #endregion private variables         #region dllimport         [dllimport("advapi32.dll")]         public static extern intptr openscmanager(string lpmachinename, string lpscdb, int scparameter);         [dllimport("advapi32.dll")]         public static extern intptr createservice(intptr sc_handle, string lpsvcname, string lpdisplayname,         int dwdesiredaccess, int dwservicetype, int dwstarttype, int dwerrorcontrol, string lppathname,         string lploadordergroup, int lpdwtagid, string lpdependencies, string lpservicestartname, string lppassword);         [dllimport("advapi32.dll")]         public static extern void closeservicehandle(intptr schandle);         [dllimport("advapi32.dll")]         public static extern int startservice(intptr svhandle, int dwnumserviceargs, string lpserviceargvectors);         [dllimport("advapi32.dll", setlasterror = true)]         public static extern intptr openservice(intptr schandle, string lpsvcname, int dwnumserviceargs);         [dllimport("advapi32.dll")]         public static extern int deleteservice(intptr svhandle);         [dllimport("kernel32.dll")]         public static extern int getlasterror();         #endregion dllimport         /// <summary>         /// 应用程序入口.         /// </summary>         [stathread]         static void main(string[] args)         {             string svcpath;             string svcname;             string svcdispname;             //服务程序的路径             svcpath = @"c:\myservice.exe";             svcdispname = "myservice";             svcname = "myservice";             serviceinstaller c = new serviceinstaller();             c.installservice(svcpath, svcname, svcdispname);             console.read();         }         /// <summary>         /// 安装和运行         /// </summary>         /// <param name="svcpath">程序路径.</param>         /// <param name="svcname">服务名</param>         /// <param name="svcdispname">服务显示名称.</param>         /// <returns>服务安装是否成功.</returns>         public bool installservice(string svcpath, string svcname, string svcdispname)         {             #region constants declaration.             int sc_manager_create_service = 0x0002;             int service_win32_own_process = 0x00000010;             //int service_demand_start = 0x00000003;             int service_error_normal = 0x00000001;             int standard_rights_required = 0xf0000;             int service_query_config = 0x0001;             int service_change_config = 0x0002;             int service_query_status = 0x0004;             int service_enumerate_dependents = 0x0008;             int service_start = 0x0010;             int service_stop = 0x0020;             int service_pause_continue = 0x0040;             int service_interrogate = 0x0080;             int service_user_defined_control = 0x0100;             int service_all_access = (standard_rights_required |             service_query_config |             service_change_config |             service_query_status |             service_enumerate_dependents |             service_start |             service_stop |             service_pause_continue |             service_interrogate |             service_user_defined_control);             int service_auto_start = 0x00000002;             #endregion constants declaration.             try             {                 intptr sc_handle = openscmanager(null, null, sc_manager_create_service);                 if (sc_handle.toint32() != 0)                 {                     intptr sv_handle = createservice(sc_handle, svcname, svcdispname, service_all_access, service_win32_own_process, service_auto_start, service_error_normal, svcpath, null, 0, null, null, null);                     if (sv_handle.toint32() == 0)                     {                         closeservicehandle(sc_handle);                         return false;                     }                     else                     {                         //试尝启动服务                         int i = startservice(sv_handle, 0, null);                         if (i == 0)                         {                             return false;                         }                         closeservicehandle(sc_handle);                         return true;                     }                 }                 else                     return false;             }             catch (exception e)             {                 throw e;             }         }         /// <summary>         /// 反安装服务.         /// </summary>         /// <param name="svcname">服务名.</param>         public bool uninstallservice(string svcname)         {             int generic_write = 0x40000000;             intptr sc_hndl = openscmanager(null, null, generic_write);             if (sc_hndl.toint32() != 0)             {                 int delete = 0x10000;                 intptr svc_hndl = openservice(sc_hndl, svcname, delete);                 if (svc_hndl.toint32() != 0)                 {                     int i = deleteservice(svc_hndl);                     if (i != 0)                     {                         closeservicehandle(sc_hndl);                         return true;                     }                     else                     {                         closeservicehandle(sc_hndl);                         return false;                     }                 }                 else                     return false;             }             else                 return false;         }     } }
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部