2013年10月10日星期四

C#开发Windows服务实例实现禁止QQ运行 - 翟中龙

本邮件内容由第三方提供,如果您不想继续收到该邮件,可 点此退订
C#开发Windows服务实例实现禁止QQ运行 - 翟中龙  阅读原文»

本实例主要实现下面三个基本功能

1、C#开发windows服务

2、禁止QQ等程序运行

3、为windows服务创建自动安装程序

下面针对这三个基本功能进行实现

一、C#开发windows服务

Windows服务在VS以前的版本中叫NT服务,在VS.NET启用了新的名称。用C#创建windows服务不是一件困难的事,下页针对服务创建、启动、停止做详细介绍

1、首先在vs中添加一winform程序KillService

2、在解决方案添加新项中添加Windows服务

3、打开服务页面,切换至代码页面有两个方法如下:

protected override void OnStart(string[] args)
{
// TODO: 在此处添加代码以启动服务。
}
protected override void OnStop()
{
// TODO: 在此处添加代码以执行停止服务所需的关闭操作。
}

当服务启动之后一般会要求每隔几秒或者几分钟刷新一次数据,所以要用到一个定时器,在定时器里边进行业务操作。windows服务不能直接在VS下进行调试,所以可以选择使用日志形式记录服务的各种启动停止或者异常的状态。具体实现代码如下:

partial class Service1 : ServiceBase
{
static System.Timers.Timer oTimer_Get = new System.Timers.Timer();
public Service1()
{
InitializeComponent();
}

protected override void OnStart(string[] args)
{
// TODO: 在此处添加代码以启动服务。
AutoLog = false;
FileLog.Success(
"服务已启动");
oTimer_Get.Enabled
= true;
oTimer_Get.Interval
= 10000;
oTimer_Get.Elapsed
+= new System.Timers.ElapsedEventHandler(OnTimedEvent);
}
private void OnTimedEvent(object sender, System.Timers.ElapsedEventArgs e)
{
FileLog.Success(
"开始发送");
oTimer_Get.Enabled
= false;
try
{
//此处可进行编写详细的业务操作
}
catch (Exception ex)
{
FileLog.Error(ex.Source
+ "" + ex.Message);
}
oTimer_Get.Enabled
= true;
FileLog.Success(
"结束发送");
}
protected override void OnStop()
{
// TODO: 在此处添加代码以执行停止服务所需的关闭操作。
FileLog.Success("服务已停止");
oTimer_Get.Enabled
= false;
}
}

文件记录类代码

/// <summary>
/// 文件型日志记录
/// </summary>
public static class FileLog
{
private static string sFilePath = System.Configuration.ConfigurationSettings.AppSettings["UserLog"];
/// <summary>
/// 错误日志
/// </summary>
/// <param name="Message">错误内容</param>
public static void Error(string Message)
{
try
{
if (!Directory.Exists(sFilePath))
{
Directory.CreateDirectory(sFilePath);
}
string sFileName = sFilePath + "\\" + string.Format("{0}-Error.txt", DateTime.Now.ToString("yyyy-MM-dd"));
string sContent = string.Format("{0}-- {1}\r\n", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), Message);
FileStream fs
= new FileStream(sFileName, FileMode.Append);
Byte[] b
= Encoding.Default.GetBytes(sContent);
fs.Write(b,
0, b.Length);
fs.Close();
}
catch { }
}
/// <summary>
/// 正确日志
/// </summary>
/// <param name="Message">正确内容面试题-螺旋矩阵 - SkyMine  阅读原文»

imageimage

小弟不才,若有高手路过,请多指点,不胜荣幸!

话说,今日参加一家公司面试,要求实现如上如这种矩阵,初一看 ,就一矩阵,信誓旦旦的以为很简单呢,结果开始写代码的时候才发现这不是一般的矩阵,而是一只蜗牛呀,直接昏倒!老实说,小弟当时被这只蜗牛吓到了,然后果断放弃了,答了剩下的题。至于面试结果如何,且听有机会的时候分解!


面试受挫,但我不能停止前进的脚步,归来之后仔细研究了一下,发现了如下 规律:

image

如此图所示,最外层的规律便是红线所示的四组数组成的,哈 ,既然发现了规律 ,那么繁琐的工作就交给计算机来完成了,那么,我就先咽下第一口芥末喽:


Step1:实现红线1

image image实现结果

首先,做些准备工作吧

1: int num=0; 2: Console.WriteLine("请输入矩阵的长度:"); 3: string getKeys= Console.ReadLine(); 4: int.TryParse(getKeys, out num); //输入数组长度 5: int[,] dataArray =new int[num,num]; 6: int y=0; //设置初始值,线一开始位置 坐标 x,y 7: int x=0; 8: int number=1; //蜗牛的起点

线1的实现就很简单了,简单的一个循环

1: 2: int startX = x; 3: int startY = y; 4: while (y < num-1) 5: { 6: dataArray[startX, y] = number; 7: number++; 8: y++; 9: }


Step2:实现整个外围

后面的坐标变化,还是直接上图吧:

image

既然知道了坐标是怎么变化的,那么就通过一些列的循环赋值吧!

1: int startX = x; 2: int startY = y; 3: while (y < num-1) 4: { 5: dataArray[startX, y] = number; 6: number++; 7: y++; 8: } 9: while (x < num - 1) 10: { 11: dataArray[x, y] = number; 12: number++; 13: x++; 14: } 15: 16: while (y > startX) 17: { 18: 19: dataArray[x, y] = number; 20: number++; 21: y--; 22: } 23: while (x > y) 24: { 25: dataArray[x, y] = number; 26: number++; 27: x--; 28: }

image

好一个偷心的贼,这样的结果谁都不能接受啊!下一步,u=3562504208,2026535318&fm=59


Step3:还你一颗真诚的心!

image

哈 ,原来内部也是有规律的 ,这个时候,是不是要递归一下呢?

大笑

1: private static int First(int num, int[,] dataArray, int y, int x, int number) 2: {阅读更多内容

没有评论:

发表评论