Csharp/C#教程:使用winapi安装Windows服务示例程序分享

代码如下:
usingsystem;
usingsystem.runtime.interopservices;
namespacemyserviceinstaller
{
    classserviceinstaller
    {
        #regionprivatevariables
        privatestring_servicepath;
        privatestring_servicename;
        privatestring_servicedisplayname;
        #endregionprivatevariables
        #regiondllimport
        [dllimport(“advapi32.dll”)]
        publicstaticexternintptropenscmanager(stringlpmachinename,stringlpscdb,intscparameter);
        [dllimport(“advapi32.dll”)]
        publicstaticexternintptrcreateservice(intptrsc_handle,stringlpsvcname,stringlpdisplayname,
        intdwdesiredaccess,intdwservicetype,intdwstarttype,intdwerrorcontrol,stringlppathname,
        stringlploadordergroup,intlpdwtagid,stringlpdependencies,stringlpservicestartname,stringlppassword);
        [dllimport(“advapi32.dll”)]
        publicstaticexternvoidcloseservicehandle(intptrschandle);
        [dllimport(“advapi32.dll”)]
        publicstaticexternintstartservice(intptrsvhandle,intdwnumserviceargs,stringlpserviceargvectors);
        [dllimport(“advapi32.dll”,setlasterror=true)]
        publicstaticexternintptropenservice(intptrschandle,stringlpsvcname,intdwnumserviceargs);
        [dllimport(“advapi32.dll”)]
        publicstaticexternintdeleteservice(intptrsvhandle);
        [dllimport(“kernel32.dll”)]
        publicstaticexternintgetlasterror();
        #endregiondllimport
        ///<summary>
        ///应用程序入口.
        ///</summary>
        [stathread]
        staticvoidmain(string[]args)
        {
            stringsvcpath;
            stringsvcname;
            stringsvcdispname;
            //服务程序的路径
            svcpath=@”c:myservice.exe”;
            svcdispname=”myservice”;
            svcname=”myservice”;
            serviceinstallerc=newserviceinstaller();
            c.installservice(svcpath,svcname,svcdispname);
            console.read();
        }
        ///<summary>
        ///安装和运行< br>        ///</summary>
        ///<paramname=”svcpath”>程序路径.</param>
        ///<paramname=”svcname”>服务名</param>
        ///<paramname=”svcdispname”>服务显示名称.</param>
        ///<returns>服务安装是否成功.</returns>
        publicboolinstallservice(stringsvcpath,stringsvcname,stringsvcdispname)
        {
            #regionconstantsdeclaration.
            intsc_manager_create_service=0x0002;
            intservice_win32_own_process=0x00000010;
            //intservice_demand_start=0x00000003;
            intservice_error_normal=0x00000001;
            intstandard_rights_required=0xf0000;
            intservice_query_config=0x0001;
            intservice_change_config=0x0002;
            intservice_query_status=0x0004;
            intservice_enumerate_dependents=0x0008;
            intservice_start=0x0010;
            intservice_stop=0x0020;
            intservice_pause_continue=0x0040;
            intservice_interrogate=0x0080;
            intservice_user_defined_control=0x0100;
            intservice_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);
            intservice_auto_start=0x00000002;
            #endregionconstantsdeclaration.
            try
            {
                intptrsc_handle=openscmanager(null,null,sc_manager_create_service);
                if(sc_handle.toint32()!=0)
                {
& nbsp;                   intptrsv_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);
                        returnfalse;
                    }
                    else
                    {
                        //试尝启动服务
                        inti=startservice(sv_handle,0,null);
                        if(i==0)
                        {
                            returnfalse;
                        }
                        closeservicehandle(sc_handle);
                        returntrue;
                    }
                }
                else
                    returnfalse;
            }
            catch(exceptione)
            {
                throwe;
            }
        }
        ///<summary>
        ///反安装服务.
        ///</summary>
        ///<paramname=”svcname”>服务名.</param>
        publicbooluninstallservice(stringsvcname)
        {
          &nbsp ; intgeneric_write=0x40000000;
            intptrsc_hndl=openscmanager(null,null,generic_write);
            if(sc_hndl.toint32()!=0)
            {
                intdelete=0x10000;
                intptrsvc_hndl=openservice(sc_hndl,svcname,delete);
                if(svc_hndl.toint32()!=0)
                {
                    inti=deleteservice(svc_hndl);
                    if(i!=0)
                    {
                        closeservicehandle(sc_hndl);
                        returntrue;
                    }
                    else
                    {
                        closeservicehandle(sc_hndl);
                        returnfalse;
                    }
                }
                else
                    returnfalse;
            }
            else
                returnfalse;
        }
    }
}

您可能感兴趣的文章:使用WindowsAPI获取录音音频的方法python调用windowsapi锁定计算机示例C#中调用WindowsAPI的技术要点说明基于WindowsAPI分解路径问题的详解WindowsAPI函数大全(完整)WINDOWS2000下使用ISAPI方式安装PHPWindows程序内部运行机制实例详解Windows中使用计划任务自动执行PHP程序实例深入详解C编写Windows服务程序的五个步骤使用WindowsAPI实现播放PCM音频的方法

标签: api Windows win ws ow 安装 示例 程序 do dow

利用windows性能计数器进行服务器性能监控示例分享

C++使用CriticalSection实现线程同步实例

上述就是C#学习教程:使用winapi安装Windows服务示例程序分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/cdevelopment/905186.html

(0)
上一篇 2021年10月22日
下一篇 2021年10月22日

精彩推荐