Windows服務操作之sc和net命令及windows任務計划


看個粟子:

 1、“新建項目”——“Window服務”

生成的目錄結構

雙擊“MainService.cs”,右鍵點擊“添加安裝程序”,自動會生成Projectinstaller.cs文件以及兩個安裝組件,對兩個組件更名並做屬性設置:

對服務的啟動與停止添加代碼

using System;
using System.Diagnostics;
using System.IO;
using System.ServiceProcess;
using System.Timers;

namespace MainService
{
    public partial class MainService : ServiceBase
    {
        private Timer time = new Timer();
        public MainService()
        {
            InitializeComponent();
        }

        protected override void OnStart(string[] args)
        {
            WriteLog("服務啟動,時間:" + DateTime.Now.ToString("HH:mm:ss") + "\r\n");

            time.Elapsed += new System.Timers.ElapsedEventHandler(MethodEvent);
            time.Interval = 2 * 1000;//時間間隔為2秒鍾
            time.Start();
        }

        protected override void OnStop()
        {
            WriteLog("服務停止,時間:" + DateTime.Now.ToString("HH:mm:ss") + "\r\n");
        }

        private void MethodEvent(object source, System.Timers.ElapsedEventArgs e)
        {
            time.Enabled = false;

            string result = string.Empty;
            string startTime = DateTime.Now.ToString("HH:mm:ss");
            try
            {
                //.........

                result = "執行成功,時間為:" + startTime;
            }
            catch (Exception exp)
            {
                result = "失敗,原因:" + exp.Message;
            }
            finally
            {
                WriteLog(result);

                time.Enabled = true;
            }
        }

        /// <summary>
        /// 日志記錄
        /// </summary>
        /// <param name="logInfo"></param>
        public void WriteLog(string logInfo)
        {
            try
            {
                string logDirectory = AppDomain.CurrentDomain.BaseDirectory + "\\Logs";
                if (!Directory.Exists(logDirectory))
                {
                    Directory.CreateDirectory(logDirectory);
                }
                string filePath = logDirectory + "\\" + DateTime.Now.ToString("yyyy-MM-dd") + ".txt";
                File.AppendAllText(filePath, logInfo);
            }
            catch
            {
            }
        }
    }
}
View Code

添加windows窗體應用程序,命名為:InstallService

對啟動程序添加代碼:

using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Text;

namespace InstallService
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("這是Windows應用程序");
            Console.WriteLine("請選擇,[1]安裝服務 [2]卸載服務 [3]退出");
  
 
            var rs = int.Parse(Console.ReadLine());
            switch (rs)
            {
                case 1:
                    //取當前可執行文件路徑,加上"s"參數,證明是從windows服務啟動該程序
                    var path = Process.GetCurrentProcess().MainModule.FileName;
                    Process.Start("sc", "create myserver binpath= \"" + path + "\" displayName=MainService start= auto");
                    //因sc命令安裝后未看到描述,我懷疑安裝的服務不一定是我所創建的MainService服務項目,這為添加描述
                    Process.Start("sc", "description myserver \"利用空閑的網絡帶寬在后台傳輸文件。如果服務被停用,例如 Windows Update 和 MSN Explorer 的功能將無法自動下載程序和其他信息。如果此服務被禁用,任何依賴它的服務如果沒有容錯技術以直接通過 IE 傳輸文件,一旦 BITS 被禁用,就可能無法傳輸文件。\"");
                    Console.WriteLine("安裝成功");
                    Console.Read();
                    break; 
                case 2:
                    Process.Start("sc", "delete myserver");
                    Console.WriteLine("卸載成功");
                    Console.Read();
                    break; 
                case 3: 
                    break;
            }
        }
    }
}

啟動程序:

1安裝后

運行“services.msc"打開服務管理器

我手動啟動失敗

所以我懷疑我安裝的只是一個名字,與我添加的服務沒有什么關系

選2

卸載成功

可看net命名安裝與卸載可參看:http://www.cnblogs.com/qk2014/p/4869675.html

 

windows服務操作命令有sc和net 兩個命令;

使用sc命令:

1 修改服務啟動類型

sc config 服務名 start= demand (設置服務為手動啟動)

start= auto (設置服務為自動啟動)

start= disabled (設置服務為禁用)

2 安裝服務:sc create 服務名

3 停止服務:sc stop 服務名

4 卸載服務:sc delete 服務名(卸載前先停止服務)

 

使用net命令

查看運行的服務: net start

啟動服務: net start 服務名

停止服務: net stop 服務名

卸載服務: 服務名 -uninstall (卸載前先停止服務)

 

雖然2個都能達到停止服務和啟動服務的效果,但是在重啟服務時,就是使用批處理先stop后start來實現重啟時,如果服務處於啟動狀態使用sc的stop后start,結果服務不能啟動,因為sc命令在執行stop后不會等待馬上繼續執行批處理下面的語句,這時服務正在處於停止操作狀態,所以start命令不能啟動。

 

net命令在stop時會停止等待,在服務完全停止后再繼續執行批處理后面的語句,所以net的重啟命令就會正常。

 

windows服務安裝與卸載批處理指令:

安裝:

%SystemRoot%\Microsoft.NET\Framework\v4.0.30319\installutil.exe "D:\project\psss\YGPS.PSS\YGPS.PSS.PrintService\bin\Debug\YGPS.PSS.PrintService.exe"
Net Start WinPrintService
sc config WinPrintService start= auto
pause

卸載:

sc stop WinPrintService
%SystemRoot%\Microsoft.NET\Framework\v4.0.30319\installutil.exe /u "D:\project\pss\YGPS.PSS\YGPS.PSS.PrintService\bin\Debug\YGPS.PSS.PrintService.exe"
pause

bat設置windows計划任務

設置定時任務
@echo off
set NAME=dailybackup
set TIME=20:01:00
set DAY=MON,TUE,WED,THU,FRI,SAT,SUN
set COMMAND=cscript.exe %~dp0dailybak.vbs

%SystemDrive%
cd %windir%\tasks\
if exist %NAME%.job del %NAME%.job

schtasks /create /tn %NAME% /tr "%COMMAND%" /sc weekly /d %DAY% /st %TIME% /ru system
在含有看空格的參數或則路徑前面加上 \" 進行轉義,這樣就ok
demo: schtasks /create /sc minute /mo 30 /tn "finaltest" /tr "\"d:program file\smth.bat\"" \"'20' '302'\"

 

Windows_批處理+任務計划實現文件夾定時備份

SVN.bat

@echo off
echo 本批處理為Ls_man原創
echo 更多精彩博文請訪問http://blog.csdn.net/ls_man echo 或登陸求知域官網http://www.qqextra.com color 0b & cls
echo 設置要備份的文件夾...
set "pbuf=D:\VisualSVN_Repositories"
echo 設置備份文件存放文件夾...
set "tbuf=G:\Backup_VisualSVN_Repositories"

echo 初始化壓縮程序設置...
cd \
C:
cd C:\Program Files\WinRAR
set yes=ok
echo 壓縮程序在C:\Program Files\WinRAR\WinRAR.exe

echo 設置備份文件名(以星期幾命名,即備份文件只保存最近一周)...
set name=%date%
set name=%name:~-3%
set name=svn_backup_%name%

echo 是否存在同名文件,若存在則刪除同名文件...
if exist %tbuf%\%name%.rar del %tbuf%\%name%.rar

echo 開始執行壓縮備份...
rar a -r -ed -esh %tbuf%\%name%.rar %pbuf%\*.*
echo 備份完畢!

由於要備份的文件夾和存放備份的文件夾及WinRaR的安裝路徑可能不同,根據實際情況修改即可。
下一步就是添加任務計划,打開控制面板-任務計划-添加任務計划,設置每天執行備份.bat,最好在晚上執行如凌晨1點。

 

擴展:

http://www.cnblogs.com/qk2014/p/4869675.html

http://www.cnblogs.com/testlife007/p/4396248.html

http://www.cnblogs.com/DelphiFan/archive/2009/03/10/1645579.html

http://www.cnblogs.com/a311300/archive/2010/12/30/1922229.html

http://www.cnblogs.com/wpcnblog/p/4732390.html

http://www.cnblogs.com/zcy-628/archive/2012/08/22/2650805.html

http://www.cnblogs.com/smileberry/p/4210245.html

http://www.cnblogs.com/knowledgesea/p/3616127.html

http://www.cnblogs.com/dongzhiquan/p/3231498.html

http://blog.csdn.net/ls_man

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM