分类 其它分类 下的文章

C#,将WinForm改成Service

1、添加引用:System.ServiceProcess
2、建类:

class ServiceProc : ServiceBase
{
    MainService ms = new MainService();

    public ServiceProc()
    {
        InitializeComponent();
    }

    protected override void OnStart(string[] args)
    {
        ms.NoticeEvent += Ms_NoticeEvent;
        ms.Start();
    }

    private void Ms_NoticeEvent(string type, string content, CommunalClass.Entities.LogLevels level)
    {
        LogsRecord.Write("INFO", $"[{DateTime.Now.ToString("mm:ss")}][type]{content}");
    }

    protected override void OnStop()
    {
        ms.Stop();
        Environment.Exit(Environment.ExitCode);
    }

    private System.ComponentModel.IContainer components = null;

    protected override void Dispose(bool disposing)
    {
        if (disposing && (components != null))
        {
            components.Dispose();
        }
        base.Dispose(disposing);
    }

    private void InitializeComponent()
    {
        components = new System.ComponentModel.Container();
        this.ServiceName = "SystemMonitorService";
    }
}

3、右键点击刚刚建的类,查看设计器,在设计界面上,右健,“添加安装程序”;
4、新的安装类上,会自动添加2个组件:serviceProcessInstaller1、serviceInstaller1;
5、serviceProcessInstaller1 属性:Account,改成 LocalSystem;
6、serviceInstaller1 属性:Description 描述,DisplayName 显示在服务中的名字,StartType 改成 Automatic 自动启动;
7、配置文件中加一项:run_as_service,用来配置是否以服务的方式启动程序,这样可以方便的以后随时用WINFORM方式启动;
8、改 Program.cs:

/// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
static void Main()
{
    Application.ThreadException += new ThreadExceptionEventHandler(Application_ThreadException);
    AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);

    Application.EnableVisualStyles();
    Application.SetCompatibleTextRenderingDefault(false);
    if (AppSet.Default.run_as_service)
    {
        ServiceBase[] ServicesToRun;
        ServicesToRun = new ServiceBase[] { new ServiceProc() };
        ServiceBase.Run(ServicesToRun);
    }
    else
        Application.Run(new Form1());
}

static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
{
    try { trip.CommunalClass.LogsRecord.write("AppDomainError", e.ExceptionObject.ToString()); }
    catch { }
}

static void Application_ThreadException(object sender, ThreadExceptionEventArgs e)
{
    try { trip.CommunalClass.LogsRecord.write("AppError", e.Exception.ToString()); }
    catch { }
}

9、此时大功告成,再就是写几个批处理文件:

-------------- 安装:service_install.bat --------------

@echo off 
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\InstallUtil.exe myapp.exe
pause

-------------- 卸载:service_uninstall.bat --------------

@echo off 
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\InstallUtil.exe /u myapp.exe
pause

-------------- 开始:service_start.bat --------------

@echo off 
net start ServiceName
pause

-------------- 停止:service_stop.bat --------------

@echo off 
net stop ServiceName
pause

将以下内容保存到系统 hosts

#github related website
52.69.186.44 github.com
151.101.185.194 github.global.ssl.fastly.net
203.98.7.65 gist.github.com
13.229.189.0 codeload.github.com
185.199.109.153 desktop.github.com
185.199.108.153 guides.github.com
185.199.108.153 blog.github.com
18.204.240.114 status.github.com
185.199.108.153 developer.github.com
185.199.108.153 services.github.com
192.30.253.175 enterprise.github.com
34.195.49.195 education.github.com
185.199.108.153 pages.github.com
34.196.237.103 classroom.github.com

dbbackup.bat

@echo off
set bak_file=D:\data\backup\mydb_%date:~2,2%%date:~5,2%%date:~8,2%%time:~0,2%%time:~3,2%

mysqldump -h127.0.0.1 -P8010 -uroot -pPassword mydb > %bak_file%_db.sql
mysqldump -h127.0.0.1 -P8010 -uroot -pPassword -n -t -d -R allchat > %bak_file%_sp.sql

::zip
makecab /d compressiontype=mszip %bak_file%_db.sql %bak_file%_db.zip
makecab /d compressiontype=mszip %bak_file%_sp.sql %bak_file%_sp.zip

del /f /s /q %bak_file%_db.sql
del /f /s /q %bak_file%_sp.sql

deloldbak

deloldbak.bat

@echo off
title 清理IIS日志文件

:: 日志文件目录
set log_dir="D:\data\backup"

:: 保留日志天数
set bak_dat=15

:: 删除日志文件
forfiles /p %log_dir% /S /M *.zip /D -%bak_dat% /C "cmd /c echo 正在删除@relpath 文件… & echo. & del @file"

:: pause

如何训练泰迪犬在指定地点大小便呢?其实这个训练并不难。

1、事先先给狗准备厕所,即准备大一点的平底盘子,在底部铺塑胶布,上面铺上几张事先染上你养这只狗的尿迹的旧报纸,然后放在走廊的角落或厕所、浴室内。

2、由于狗狗在进食过后不久,较容易想上厕所。因此每次狗狗吃完饭后10~20分钟(时间长短可通过观察狗狗的习性后得出),就带它到同一地点“待命”,一旦狗狗有大小便的意图,就给予鼓励。(记住:这个时间是狗狗大小便训练的最好时机!!)。

3、狗狗排完便后,把上一层的两张报纸和粪便一起处理掉,留下一张稍微有粪便气味的即可,狗狗就会慢慢熟悉这个排便地点了。

4、久而久之,泰迪小狗就会知道应该在你指定的地方大小便,以后它就会“主动”在饭后,跑到你经常带它去的地点上厕所。以后,只要狗狗在指定的地点排泄,你就应该用正面语气鼓励它,说:“好棒!!”也可给它点好吃的,狗狗最喜欢食物奖励。

5、如果看到泰迪小狗不在规定的便器内排便,而在其它地方时,你应该现场严厉告诉狗狗:“不准在此地排便!”同时用手轻轻打其屁股,以示警告。然后在排便的地方,用肥皂水洗干净,去除臭味。否则,小狗嗅到它自己粪便的气味,还会在此地大小便。

6、泰迪狗狗是很聪明的,只要反复数次,耐心调教一、二个星期,较慢的至三、四个星期就能学会。往后除了外出,它通常都会在规定的地方排大小便。

不过提醒各位狗主:就算小泰迪学会之后,也不保证100%不会出错喔!因为小狗狗还小,有时心情上的问题或是忍功还没大泰迪狗好,一时来不及随地就拉下去。此时也不要太生气~~正常的(不是开倒车啦) 等长大一点,一切都会OK。
要点补充:

1、在泰迪狗狗定点如厕训练过程中,若发生狗狗来不及到定点就已经排泄,这时狗主不可过度严厉的斥责,适可而止就行;注意还是要通过对狗狗正面的奖励,来建立狗狗正确的行为。不然有些狗狗比较胆小,过度受到惊吓,更容易胡乱大小便。

2、别忘了狗狗是用联想式记忆法去学习的,所以以上的鼓励,都必须在狗狗做出动作的第一时间进行。而且记忆学习需要花些时间来培养,不是一两天就能做到的,狗主要有耐心。